diff --git a/.travis.yml b/.travis.yml index 5a51ea92..a8378ed2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -35,7 +35,7 @@ matrix: - binutils-gold - env: DCGP_BUILD="CoverageGCC" dist: bionic - compiler: gcc + compiler: gcc os: linux addons: apt: @@ -43,28 +43,6 @@ matrix: - ubuntu-toolchain-r-test packa1ges: - binutils-gold - # These are to be uncommented when the quadmath issue is understood and fixed (maybe upstream?) - # These builds fail as per a not found quadmath.h ... its not clear why or how - #- env: DCGP_BUILD="ReleaseClang" - # dist: bionic - # compiler: clang - # os: linux - # addons: - # apt: - # sources: - # - ubuntu-toolchain-r-test - # packages: - # - clang-7 - #- env: DCGP_BUILD="DebugClang" - # dist: bionic - # compiler: clang - # os: linux - # addons: - # apt: - # sources: - # - ubuntu-toolchain-r-test - # packages: - # - clang-7 - env: DCGP_BUILD="Python37" dist: bionic compiler: gcc @@ -74,6 +52,7 @@ matrix: sources: - ubuntu-toolchain-r-test - env: DCGP_BUILD="Python27" + dist: bionic compiler: gcc os: linux addons: @@ -84,26 +63,19 @@ matrix: os: osx - env: DCGP_BUILD="OSXRelease" os: osx - # These are Commented as per a weird segfault that must be investigated .... - #- env: DCGP_BUILD="OSXPython37" - # os: osx - # #osx_image: xcode6.4 - #- env: DCGP_BUILD="OSXPython27" - # os: osx - # #osx_image: xcode6.4 - - env: DCGP_BUILD="manylinux64Py37" DOCKER_IMAGE="pagmo2/manylinux1_x86_64_with_deps" - sudo: required - services: - - docker - - env: DCGP_BUILD="manylinux64Py36" DOCKER_IMAGE="pagmo2/manylinux1_x86_64_with_deps" + - env: DCGP_BUILD="OSXPython37" + os: osx + - env: DCGP_BUILD="OSXPython27" + os: osx + - env: DCGP_BUILD="manylinux64Py37" DOCKER_IMAGE="pagmo2/manylinux2010_x86_64_with_deps" sudo: required services: - docker - - env: DCGP_BUILD="manylinux64Py27" DOCKER_IMAGE="pagmo2/manylinux1_x86_64_with_deps" + - env: DCGP_BUILD="manylinux64Py36" DOCKER_IMAGE="pagmo2/manylinux2010_x86_64_with_deps" sudo: required services: - docker - - env: DCGP_BUILD="manylinux64Py27mu" DOCKER_IMAGE="pagmo2/manylinux1_x86_64_with_deps" + - env: DCGP_BUILD="manylinux64Py27" DOCKER_IMAGE="pagmo2/manylinux2010_x86_64_with_deps" sudo: required services: - docker diff --git a/CMakeLists.txt b/CMakeLists.txt index a55bd364..d3e8a33f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -65,10 +65,76 @@ if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin" AND YACMA_COMPILER_IS_CLANGXX) list(APPEND DCGP_CXX_FLAGS_RELEASE "-stdlib=libc++") endif() if(YACMA_COMPILER_IS_MSVC) + include(CheckCXXCompilerFlag) # Disable the idiotic minmax macros on MSVC, some annoying warnings, # and enable the bigobj option. - list(APPEND DCGP_CXX_FLAGS_DEBUG "-DNOMINMAX" "/wd4459" "/wd4127" "/wd4702" "/bigobj") - list(APPEND DCGP_CXX_FLAGS_RELEASE "-DNOMINMAX" "/wd4459" "/wd4127" "/wd4702" "/bigobj") + # Also, enable the WIN32_LEAN_AND_MEAN definition. + list(APPEND DCGP_CXX_FLAGS_DEBUG "-DNOMINMAX" "/wd4459" "/wd4127" "/wd4702" "/bigobj" "-DWIN32_LEAN_AND_MEAN") + list(APPEND DCGP_CXX_FLAGS_RELEASE "-DNOMINMAX" "/wd4459" "/wd4127" "/wd4702" "/bigobj" "-DWIN32_LEAN_AND_MEAN") + # Enable strict conformance mode, if supported. + set(CMAKE_REQUIRED_QUIET TRUE) + check_cxx_compiler_flag("/permissive-" _DCGP_MSVC_SUPPORTS_STRICT_CONFORMANCE) + unset(CMAKE_REQUIRED_QUIET) + if(_DCGP_MSVC_SUPPORTS_STRICT_CONFORMANCE) + message(STATUS "The '/permissive-' flag is supported, enabling it.") + list(APPEND DCGP_CXX_FLAGS_DEBUG "/permissive-") + list(APPEND DCGP_CXX_FLAGS_RELEASE "/permissive-") + endif() + unset(_DCGP_MSVC_SUPPORTS_STRICT_CONFORMANCE) + if(YACMA_COMPILER_IS_CLANGXX) + # clang-cl emits various warnings from GMP/MPFR, let's just silence them. + # NOTE: at one point in the recent past, MSVC added an options similar to GCC's isystem: + # https://blogs.msdn.microsoft.com/vcblog/2017/12/13/broken-warnings-theory/ + # We probably just need to wait for this to be picked up by CMake/clang-cl. Let's + # revisit the issue in the future. + list(APPEND _DCGP_CLANG_CL_DISABLED_WARNINGS + "-Wno-unused-variable" + "-Wno-inconsistent-dllimport" + "-Wno-unknown-pragmas" + "-Wno-unused-parameter" + "-Wno-sign-compare" + "-Wno-deprecated-declarations" + "-Wno-deprecated-dynamic-exception-spec" + "-Wno-old-style-cast" + "-Wno-sign-conversion" + "-Wno-non-virtual-dtor" + "-Wno-deprecated" + "-Wno-shadow" + "-Wno-shorten-64-to-32" + "-Wno-reserved-id-macro" + "-Wno-undef" + "-Wno-c++98-compat-pedantic" + "-Wno-documentation-unknown-command" + "-Wno-zero-as-null-pointer-constant" + "-Wno-language-extension-token" + "-Wno-gnu-anonymous-struct" + "-Wno-nested-anon-types" + "-Wno-documentation" + "-Wno-comma" + "-Wno-nonportable-system-include-path" + "-Wno-global-constructors" + "-Wno-redundant-parens" + "-Wno-exit-time-destructors" + "-Wno-missing-noreturn" + "-Wno-switch-enum" + "-Wno-covered-switch-default" + "-Wno-float-equal" + "-Wno-double-promotion" + "-Wno-microsoft-enum-value" + "-Wno-missing-prototypes" + "-Wno-implicit-fallthrough" + "-Wno-format-nonliteral" + "-Wno-cast-qual" + "-Wno-disabled-macro-expansion" + "-Wno-unused-private-field" + "-Wno-unused-template" + "-Wno-unused-macros" + "-Wno-extra-semi-stmt" + "-Wno-c++98-compat") + list(APPEND DCGP_CXX_FLAGS_DEBUG ${_DCGP_CLANG_CL_DISABLED_WARNINGS}) + list(APPEND DCGP_CXX_FLAGS_RELEASE ${_DCGP_CLANG_CL_DISABLED_WARNINGS}) + unset(_DCGP_CLANG_CL_DISABLED_WARNINGS) + endif() endif() if(YACMA_COMPILER_IS_INTELXX) # NOTE: on MSVC we use the push/pop pragmas, but they do not seem to work on Intel (the pragmas @@ -85,7 +151,7 @@ if(MINGW) list(APPEND DCGP_CXX_FLAGS_RELEASE "-Wa,-mbig-obj") endif() -# Some flags that generate warnings due to Eigen or Piranha obsolete versions +# Some flags that generate warnings due to Eigen obsolete versions list(REMOVE_ITEM DCGP_CXX_FLAGS_DEBUG "-Wduplicated-branches") list(REMOVE_ITEM DCGP_CXX_FLAGS_DEBUG "-Wold-style-cast") @@ -119,34 +185,9 @@ if(DCGP_BUILD_DCGP) message(STATUS "Eigen version detected: ${EIGEN3_VERSION}") include_directories(${EIGEN3_INCLUDE_DIR}) - # Piranha setup. - find_package(Piranha REQUIRED) - message(STATUS "Piranha library found.") - message(STATUS "Piranha include dir is: ${Piranha_INCLUDE_DIR}") - include_directories(${Piranha_INCLUDE_DIR}) - - # GMP setup. - find_package(GMP REQUIRED) - message(STATUS "GMP library found.") - message(STATUS "GMP include dir is: ${GMP_INCLUDE_DIR}") - message(STATUS "GMP library is: ${GMP_LIBRARIES}") - - # MPFR setup. - find_package(MPFR REQUIRED) - message(STATUS "MPFR library found.") - message(STATUS "MPFR include dir is: ${MPFR_INCLUDE_DIR}") - message(STATUS "MPFR library is: ${MPFR_LIBRARIES}") - message(STATUS "Checking MPFR version.") - try_compile(MPFR_VERSION_CHECK ${CMAKE_BINARY_DIR} "${CMAKE_SOURCE_DIR}/cmake_modules/mpfr_check_version.cpp" - CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:STRING=${MPFR_INCLUDE_DIR};${GMP_INCLUDE_DIR}") - if(NOT MPFR_VERSION_CHECK) - message(FATAL_ERROR "Unsupported MPFR version, please upgrade.") - endif() - message(STATUS "MPFR version is ok.") - # Audi setup find_package(Audi REQUIRED) - message(STATUS "AUDI include dir is: ${AUDI_INCLUDE_DIRS}") + message(STATUS "AUDI include dir is: ${DCGP_INCLUDE_DIRS}") # Pagmo setup find_package(Pagmo REQUIRED) @@ -167,7 +208,7 @@ if(DCGP_BUILD_DCGP) # Setup of the header-only dcgp library. add_library(dcgp INTERFACE) - target_link_libraries(dcgp INTERFACE Threads::Threads Boost::boost Boost::serialization Eigen3::eigen3 MPFR::MPFR GMP::GMP TBB::tbb) + target_link_libraries(dcgp INTERFACE Boost::boost Boost::serialization Eigen3::eigen3 TBB::tbb) target_link_libraries(dcgp INTERFACE Audi::audi Pagmo::pagmo ${SYMENGINE_LIBRARIES}) @@ -177,14 +218,11 @@ if(DCGP_BUILD_DCGP) $ $) - # These lines are temporary with piranha v0.10, may be simplified when this is updated - target_include_directories(dcgp INTERFACE ${Piranha_INCLUDE_DIR}) - # Build main if(DCGP_BUILD_MAIN) add_executable(main main.cpp) target_link_libraries(main dcgp) - set_property(TARGET main PROPERTY CXX_STANDARD 14) + set_property(TARGET main PROPERTY CXX_STANDARD 17) set_property(TARGET main PROPERTY CXX_STANDARD_REQUIRED YES) set_property(TARGET main PROPERTY CXX_EXTENSIONS NO) endif() @@ -210,11 +248,7 @@ if(DCGP_BUILD_DCGP) configure_file("${CMAKE_CURRENT_SOURCE_DIR}/dcgp-config.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/dcgp-config.cmake" @ONLY) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/dcgp-config.cmake" DESTINATION "lib/cmake/dcgp") - install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/FindGMP.cmake" - "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/FindMPFR.cmake" - "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/FindPiranha.cmake" - "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/DCGPFindBoost.cmake" - "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/FindAudi.cmake" + install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/DCGPFindBoost.cmake" "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/FindEigen3.cmake" "${CMAKE_CURRENT_SOURCE_DIR}/cmake_modules/FindTBB.cmake" DESTINATION "lib/cmake/dcgp") diff --git a/README.md b/README.md index 45174e74..167d6be5 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,6 @@ otherwise you will have to compile it by activating the BUILD_DCGPY option in CM ### Dependencies Several dependencies are necessary to successfully compile d-CGP * Audi, headers only library - (git clone https://github.com/darioizzo/audi.git) - * Piranha, headers only library - (git clone https://github.com/bluescarni/piranha.git) * Boost, headers only After making sure the dependencies above are installed in your system, you may download the latest dCGP version via git: diff --git a/appveyor.yml b/appveyor.yml deleted file mode 100644 index e7151e28..00000000 --- a/appveyor.yml +++ /dev/null @@ -1,27 +0,0 @@ -skip_branch_with_pr: true - -environment: - TWINE_PASSWORD: - secure: M+qvYgRh05fEw6G9aglK4g== - matrix: - - BUILD_TYPE: "Release" - - BUILD_TYPE: "Debug" - - BUILD_TYPE: "Python37-x64" - - BUILD_TYPE: "Python36-x64" - - BUILD_TYPE: "Python27-x64" - global: - PLATFORMTOOLSET: "v140" - -install: -# Rename sh.exe as sh.exe in PATH interferes with MinGW. -- rename "C:\Program Files\Git\usr\bin\sh.exe" "sh2.exe" - -build_script: -- C:\Python36-x64\python.exe tools\install_appveyor_mingw.py - -# Enable this to be able to login to the build worker. You can use the -# `remmina` program in Ubuntu, or Microsoft Remote Desktop app in osx -# use the login information that the line below prints into the log. -#on_finish: -# - ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1')) - diff --git a/azure-pipelines.yml b/azure-pipelines.yml index d8e9b155..0be97dc2 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -54,6 +54,10 @@ jobs: symengine ^ boost-cpp ^ boost ^ + tbb ^ + tbb-devel ^ + audi ^ + pyaudi ^ python=3.7 conda list displayName: "Install conda packages" @@ -87,7 +91,8 @@ jobs: -DCMAKE_PREFIX_PATH=C:\tools\miniconda3\Library ^ -DCMAKE_INSTALL_PREFIX=C:\tools\miniconda3\Library ^ -DDCGP_BUILD_DCGP=no ^ - -DDCGP_BUILD_DCGPY=yes + -DDCGP_BUILD_DCGPY=yes ^ + -DDCGP_CXX_FLAGS_EXTRA="-D_copysign=copysign" cmake --build . -- -v cmake --build . --target install python -c "import dcgpy.test; dcgpy.test.run_test_suite()" diff --git a/cmake_modules/FindAudi.cmake b/cmake_modules/FindAudi.cmake deleted file mode 100644 index e6aef4d7..00000000 --- a/cmake_modules/FindAudi.cmake +++ /dev/null @@ -1,17 +0,0 @@ -IF(AUDI_INCLUDE_DIRS) - # Already in cache, be silent - SET(AUDI_FIND_QUIETLY TRUE) -ENDIF(AUDI_INCLUDE_DIRS) - -FIND_PATH(AUDI_INCLUDE_DIRS audi/audi.hpp PATH_SUFFIXES include) - -INCLUDE(FindPackageHandleStandardArgs) - -FIND_PACKAGE_HANDLE_STANDARD_ARGS(Audi DEFAULT_MSG AUDI_INCLUDE_DIRS) - -MARK_AS_ADVANCED(AUDI_INCLUDE_DIRS) - -if(AUDI_INCLUDE_DIRS AND NOT TARGET Audi::audi) - add_library(Audi::audi INTERFACE IMPORTED) - set_target_properties(Audi::audi PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${AUDI_INCLUDE_DIRS}") -endif() diff --git a/cmake_modules/FindGMP.cmake b/cmake_modules/FindGMP.cmake deleted file mode 100644 index e46ce4a8..00000000 --- a/cmake_modules/FindGMP.cmake +++ /dev/null @@ -1,50 +0,0 @@ -# Originally copied from the KDE project repository: -# http://websvn.kde.org/trunk/KDE/kdeutils/cmake/modules/FindGMP.cmake?view=markup&pathrev=675218 - -# Copyright (c) 2006, Laurent Montel, -# Copyright (c) 2008-2018 Francesco Biscani, - -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# 1. Redistributions of source code must retain the copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# 3. The name of the author may not be used to endorse or promote products -# derived from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. -# ------------------------------------------------------------------------------------------ - -if(GMP_INCLUDE_DIR AND GMP_LIBRARY) - # Already in cache, be silent - set(GMP_FIND_QUIETLY TRUE) -endif() - -find_path(GMP_INCLUDE_DIR NAMES gmp.h) -find_library(GMP_LIBRARY NAMES gmp) - -include(FindPackageHandleStandardArgs) - -find_package_handle_standard_args(GMP DEFAULT_MSG GMP_INCLUDE_DIR GMP_LIBRARY) - -mark_as_advanced(GMP_INCLUDE_DIR GMP_LIBRARY) - -# NOTE: this has been adapted from CMake's FindPNG.cmake. -if(GMP_FOUND AND NOT TARGET GMP::GMP) - add_library(GMP::GMP UNKNOWN IMPORTED) - set_target_properties(GMP::GMP PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${GMP_INCLUDE_DIR}" - IMPORTED_LINK_INTERFACE_LANGUAGES "C" IMPORTED_LOCATION "${GMP_LIBRARY}") -endif() diff --git a/cmake_modules/FindMPFR.cmake b/cmake_modules/FindMPFR.cmake deleted file mode 100644 index fd382e10..00000000 --- a/cmake_modules/FindMPFR.cmake +++ /dev/null @@ -1,50 +0,0 @@ -# Originally copied from the KDE project repository: -# http://websvn.kde.org/trunk/KDE/kdeutils/cmake/modules/FindGMP.cmake?view=markup&pathrev=675218 - -# Copyright (c) 2006, Laurent Montel, -# Copyright (c) 2008-2018 Francesco Biscani, - -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# 1. Redistributions of source code must retain the copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# 3. The name of the author may not be used to endorse or promote products -# derived from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. -# ------------------------------------------------------------------------------------------ - -if(MPFR_INCLUDE_DIR AND MPFR_LIBRARY) - # Already in cache, be silent - set(MPFR_FIND_QUIETLY TRUE) -endif() - -find_path(MPFR_INCLUDE_DIR NAMES mpfr.h) -find_library(MPFR_LIBRARY NAMES mpfr) - -include(FindPackageHandleStandardArgs) - -find_package_handle_standard_args(MPFR DEFAULT_MSG MPFR_INCLUDE_DIR MPFR_LIBRARY) - -mark_as_advanced(MPFR_INCLUDE_DIR MPFR_LIBRARY) - -# NOTE: this has been adapted from CMake's FindPNG.cmake. -if(MPFR_FOUND AND NOT TARGET MPFR::MPFR) - add_library(MPFR::MPFR UNKNOWN IMPORTED) - set_target_properties(MPFR::MPFR PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${MPFR_INCLUDE_DIR}" - IMPORTED_LINK_INTERFACE_LANGUAGES "C" IMPORTED_LOCATION "${MPFR_LIBRARY}") -endif() diff --git a/cmake_modules/FindPiranha.cmake b/cmake_modules/FindPiranha.cmake deleted file mode 100644 index e913b247..00000000 --- a/cmake_modules/FindPiranha.cmake +++ /dev/null @@ -1,12 +0,0 @@ -IF(Piranha_INCLUDE_DIR) - # Already in cache, be silent - SET(Piranha_FIND_QUIETLY TRUE) -ENDIF(Piranha_INCLUDE_DIR) - -FIND_PATH(Piranha_INCLUDE_DIR NAMES piranha/piranha.hpp) - -INCLUDE(FindPackageHandleStandardArgs) - -FIND_PACKAGE_HANDLE_STANDARD_ARGS(Piranha DEFAULT_MSG Piranha_INCLUDE_DIR) - -MARK_AS_ADVANCED(Piranha_INCLUDE_DIR) diff --git a/cmake_modules/mpfr.hpp b/cmake_modules/mpfr.hpp deleted file mode 100644 index 55dca7f0..00000000 --- a/cmake_modules/mpfr.hpp +++ /dev/null @@ -1,34 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2009-2011 by Francesco Biscani * - * bluescarni@gmail.com * - * * - * 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 2 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, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ - -#ifndef PIRANHA_DETAIL_MPFR_HPP -#define PIRANHA_DETAIL_MPFR_HPP - -// NOTE: this extra include seems to be necessary in GCC 4.9. -#include -#include - -#if MPFR_VERSION_MAJOR < 3 - -#error Minimum supported MPFR version is 3. - -#endif - -#endif \ No newline at end of file diff --git a/cmake_modules/mpfr_check_version.cpp b/cmake_modules/mpfr_check_version.cpp deleted file mode 100644 index 161e33df..00000000 --- a/cmake_modules/mpfr_check_version.cpp +++ /dev/null @@ -1,6 +0,0 @@ -#include "mpfr.hpp" - -int main() -{ - return 0; -} \ No newline at end of file diff --git a/dcgp-config.cmake.in b/dcgp-config.cmake.in index 161baccf..76397984 100644 --- a/dcgp-config.cmake.in +++ b/dcgp-config.cmake.in @@ -6,9 +6,6 @@ set(_DCGP_CONFIG_OLD_MODULE_PATH "${CMAKE_MODULE_PATH}") list(APPEND CMAKE_MODULE_PATH "${_DCGP_CONFIG_SELF_DIR}") find_package(Threads REQUIRED) include(DCGPFindBoost) -find_package(Piranha REQUIRED) -find_package(GMP REQUIRED) -find_package(MPFR REQUIRED) find_package(Eigen3 REQUIRED) find_package(audi REQUIRED) find_package(Pagmo REQUIRED) diff --git a/dcgpy/CMakeLists.txt b/dcgpy/CMakeLists.txt index 3fbf74b1..6ee9d016 100644 --- a/dcgpy/CMakeLists.txt +++ b/dcgpy/CMakeLists.txt @@ -6,6 +6,9 @@ if(UNIX) set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") endif() +# Finding pygmo +find_package(Pygmo REQUIRED) + # The name of the BP target to link to depends on the Boost and Python versions. # NOTE: since Boost 1.67, the naming of the Boost.Python library has changed to include the # major and minor python version as a suffix. See the release notes: @@ -32,15 +35,25 @@ endif() # Setup of the header-only dcgpy library. add_library(dcgpy INTERFACE) -target_link_libraries(dcgpy INTERFACE ${DCGPY_BP_TARGET} Boost::disable_autolinking YACMA::PythonModule NumPy::numpy Dcgp::dcgp) +target_link_libraries(dcgpy INTERFACE ${DCGPY_BP_TARGET} Boost::disable_autolinking YACMA::PythonModule NumPy::numpy Dcgp::dcgp Pygmo::pygmo) target_include_directories(dcgpy INTERFACE $ $ $) +# Extra flags to be appended in CI experiments +set(DCGP_CXX_FLAGS_EXTRA) +mark_as_advanced(DCGP_CXX_FLAGS_EXTRA) +list(APPEND DCGP_CXX_FLAGS_RELEASE ${DCGP_CXX_FLAGS_EXTRA}) + # Setup of the dcgpy core module. -YACMA_PYTHON_MODULE(core core.cpp docstrings.cpp) +YACMA_PYTHON_MODULE(core + core.cpp + expose_expressions.cpp + expose_kernels.cpp + expose_symbolic_regression.cpp + docstrings.cpp) target_link_libraries(core PRIVATE ${DCGPY_BP_TARGET} dcgpy) target_compile_options(core PRIVATE "$<$:${DCGP_CXX_FLAGS_DEBUG}>" "$<$:${DCGP_CXX_FLAGS_RELEASE}>") -set_property(TARGET core PROPERTY CXX_STANDARD 14) +set_property(TARGET core PROPERTY CXX_STANDARD 17) set_property(TARGET core PROPERTY CXX_STANDARD_REQUIRED YES) set_property(TARGET core PROPERTY CXX_EXTENSIONS NO) diff --git a/dcgpy/common_utils.hpp b/dcgpy/common_utils.hpp index 017b92fe..7a1096b1 100644 --- a/dcgpy/common_utils.hpp +++ b/dcgpy/common_utils.hpp @@ -1,5 +1,5 @@ -#ifndef PYAUDI_COMMON_UTILS_HPP -#define PYAUDI_COMMON_UTILS_HPP +#ifndef PYDCGP_COMMON_UTILS_HPP +#define PYDCGP_COMMON_UTILS_HPP #include #include @@ -18,6 +18,33 @@ namespace bp = boost::python; +// Map C++ types to NPY_ types. +template +struct cpp_npy { +}; + +#define DCGPY_CPP_NPY(from, to) \ + template <> \ + struct cpp_npy { \ + static constexpr auto value = to; \ + }; + +// We only need the types below at the moment. +DCGPY_CPP_NPY(unsigned char, NPY_UBYTE) +DCGPY_CPP_NPY(unsigned short, NPY_USHORT) +DCGPY_CPP_NPY(unsigned, NPY_UINT) +DCGPY_CPP_NPY(unsigned long, NPY_ULONG) +DCGPY_CPP_NPY(unsigned long long, NPY_ULONGLONG) +DCGPY_CPP_NPY(signed char, NPY_BYTE) +DCGPY_CPP_NPY(short, NPY_SHORT) +DCGPY_CPP_NPY(int, NPY_INT) +DCGPY_CPP_NPY(long, NPY_LONG) +DCGPY_CPP_NPY(long long, NPY_LONGLONG) +DCGPY_CPP_NPY(float, NPY_FLOAT) +DCGPY_CPP_NPY(double, NPY_DOUBLE) + +#undef DCGPY_CPP_NPY + namespace dcgpy { @@ -203,6 +230,35 @@ inline std::vector> to_vv(const bp::object &o) + "' to a vector of vector_double: only lists of doubles and NumPy arrays of doubles are supported"); } +// Convert a vector of vectors of arithmetic types into a 2D numpy array. +template +inline bp::object vvector_to_ndarr(const std::vector> &v) +{ + // The dimensions of the array to be created. + const auto nrows = v.size(); + const auto ncols = nrows ? v[0].size() : 0u; + npy_intp dims[] = {boost::numeric_cast(nrows), boost::numeric_cast(ncols)}; + // Attempt creating the array. + PyObject *ret = PyArray_SimpleNew(2, dims, cpp_npy::value); + if (!ret) { + dcgpy_throw(PyExc_RuntimeError, "couldn't create a NumPy array: the 'PyArray_SimpleNew()' function failed"); + } + // Hand over to BP for exception-safe behaviour. + bp::object retval{bp::handle<>(ret)}; + if (nrows) { + auto data = static_cast(PyArray_DATA(reinterpret_cast(ret))); + for (const auto &i : v) { + if (i.size() != ncols) { + dcgpy_throw(PyExc_ValueError, "cannot convert a vector of vectors to a NumPy 2D array " + "if the vector instances don't have all the same size"); + } + std::copy(i.begin(), i.end(), data); + data += ncols; + } + } + return retval; +} + } // namespace dcgpy #endif diff --git a/dcgpy/core.cpp b/dcgpy/core.cpp index 3dac5a24..a776faea 100644 --- a/dcgpy/core.cpp +++ b/dcgpy/core.cpp @@ -1,463 +1,24 @@ -#include -#include -#include //std::function -#include -#include -#include - -#include -#include -#include -#include -#include - // See: https://docs.scipy.org/doc/numpy/reference/c-api.array.html#importing-the-api // In every cpp file We need to make sure this is included before everything else, // with the correct #defines. +#include "python_includes.hpp" #define PY_ARRAY_UNIQUE_SYMBOL dcgpy_ARRAY_API +#include "numpy.hpp" + +#include +#include +#include #include "common_utils.hpp" #include "docstrings.hpp" +#include "expose_expressions.hpp" +#include "expose_kernels.hpp" +#include "expose_symbolic_regression.hpp" -using namespace dcgp; using namespace dcgpy; using namespace audi; namespace bp = boost::python; - -template -void expose_kernel(const std::string &type) -{ - std::string class_name = "kernel_" + type; - bp::class_>(class_name.c_str(), "The function defining the generic CGP node", bp::no_init) - .def("__init__", - bp::make_constructor( - +[](const bp::object &obj1, const bp::object &obj2, const std::string &name) { - std::function &)> my_function = [obj1](const std::vector &x) { - T in = bp::extract(obj1(v_to_l(x))); - return in; - }; - std::function &)> my_print_function - = [obj2](const std::vector &x) { - std::string in = bp::extract(obj2(v_to_l(x))); - return in; - }; - return ::new kernel(my_function, my_print_function, name); - }, - bp::default_call_policies(), (bp::arg("callable_f"), bp::arg("callable_s"), bp::arg("name"))), - kernel_init_doc(type).c_str()) - .def( - "__call__", - +[](kernel &instance, const bp::object &in) { - try { - auto v = l_to_v(in); - return bp::object(instance(v)); - } catch (...) { - PyErr_Clear(); - auto v = l_to_v(in); - return bp::object(instance(v)); - } - }) - .def( - "__repr__", +[](const kernel &instance) -> std::string { - std::ostringstream oss; - oss << instance; - return oss.str(); - }); - ; -} - -template -kernel wrap_operator(const kernel_set &ks, typename std::vector>::size_type idx) -{ - return ks[idx]; -} - -template -void expose_kernel_set(std::string type) -{ - std::string class_name = "kernel_set_" + type; - bp::class_>(class_name.c_str(), - "Helper to construct a set of kernel functions from their common name", bp::no_init) - .def("__init__", - bp::make_constructor( - +[](const bp::object &obj1) { - auto a = l_to_v(obj1); - return ::new kernel_set(a); - }, - bp::default_call_policies(), (bp::arg("kernels"))), - kernel_set_init_doc(type).c_str()) - .def( - "__call__", +[](kernel_set &instance) { return v_to_l(instance()); }) - .def( - "__repr__", - +[](const kernel_set &instance) -> std::string { - std::ostringstream oss; - oss << instance; - return oss.str(); - }) - .def("push_back", (void (kernel_set::*)(std::string)) & kernel_set::push_back, - kernel_set_push_back_str_doc().c_str(), bp::arg("kernel_name")) - .def("push_back", (void (kernel_set::*)(const kernel &)) & kernel_set::push_back, - kernel_set_push_back_ker_doc(type).c_str(), bp::arg("kernel")) - .def("__getitem__", &wrap_operator); -} - -template -void expose_expression(std::string type) -{ - std::string class_name = "expression_" + type; - bp::class_>(class_name.c_str(), "A CGP expression", bp::no_init) - // Constructor with seed - .def("__init__", - bp::make_constructor( - +[](unsigned in, unsigned out, unsigned rows, unsigned cols, unsigned levelsback, - const bp::object &arity, const bp::object &kernels, unsigned n_eph, unsigned seed) { - auto kernels_v = l_to_v>(kernels); - bp::extract is_int(arity); - if (is_int.check()) { // arity is passed as an integer - unsigned ar = bp::extract(arity); - return ::new expression(in, out, rows, cols, levelsback, ar, kernels_v, n_eph, seed); - } else { // arity is passed as something else, a list is assumed - auto varity = l_to_v(arity); - return ::new expression(in, out, rows, cols, levelsback, varity, kernels_v, n_eph, seed); - } - }, - bp::default_call_policies(), - (bp::arg("inputs"), bp::arg("outputs"), bp::arg("rows"), bp::arg("cols"), bp::arg("levels_back"), - bp::arg("arity"), bp::arg("kernels"), bp::arg("n_eph"), bp::arg("seed"))), - expression_init_doc(type).c_str()) - // Constructor with no seed - .def("__init__", - bp::make_constructor( - +[](unsigned in, unsigned out, unsigned rows, unsigned cols, unsigned levelsback, - const bp::object &arity, const bp::object &kernels, unsigned n_eph) { - auto kernels_v = l_to_v>(kernels); - bp::extract is_int(arity); - if (is_int.check()) { // arity is passed as an integer - unsigned ar = bp::extract(arity); - return ::new expression(in, out, rows, cols, levelsback, ar, kernels_v, n_eph, - std::random_device()()); - } else { // arity is passed as something else, a list is assumed - auto varity = l_to_v(arity); - return ::new expression(in, out, rows, cols, levelsback, varity, kernels_v, n_eph, - std::random_device()()); - } - }, - bp::default_call_policies(), - (bp::arg("inputs"), bp::arg("outputs"), bp::arg("rows"), bp::arg("cols"), bp::arg("levels_back"), - bp::arg("arity"), bp::arg("kernels"), bp::arg("n_eph"))), - expression_init_doc(type).c_str()) - .def( - "__repr__", - +[](const expression &instance) -> std::string { - std::ostringstream oss; - oss << instance; - return oss.str(); - }) - .def( - "__call__", - +[](const expression &instance, const bp::object &in) { - try { - auto v = l_to_v(in); - return v_to_l(instance(v)); - } catch (...) { - PyErr_Clear(); - auto v = l_to_v(in); - return v_to_l(instance(v)); - } - }) - .def( - "set", +[](expression &instance, const bp::object &in) { instance.set(l_to_v(in)); }, - expression_set_doc().c_str(), bp::arg("chromosome")) - .def("set_f_gene", &expression::set_f_gene, expression_set_f_gene_doc().c_str(), - (bp::arg("node_id"), bp::arg("f_id"))) - .def( - "get", +[](const expression &instance) { return v_to_l(instance.get()); }, - "Gets the expression chromosome") - .def( - "get_lb", +[](const expression &instance) { return v_to_l(instance.get_lb()); }, - "Gets the lower bounds of the chromosome") - .def( - "get_ub", +[](const expression &instance) { return v_to_l(instance.get_ub()); }, - "Gets the upper bounds of the chromosome") - .def( - "get_active_genes", +[](const expression &instance) { return v_to_l(instance.get_active_genes()); }, - "Gets the idx of the active genes in the current chromosome (numbering is from 0)") - .def( - "get_active_nodes", +[](const expression &instance) { return v_to_l(instance.get_active_nodes()); }, - "Gets the idx of the active nodes in the current chromosome") - .def("get_n", &expression::get_n, "Gets the number of inputs of the dCGP expression") - .def("get_m", &expression::get_m, "Gets the number of outputs of the dCGP expression") - .def("get_rows", &expression::get_r, "Gets the number of rows of the dCGP expression") - .def("get_cols", &expression::get_c, "Gets the number of columns of the dCGP expression") - .def("get_levels_back", &expression::get_l, "Gets the number of levels-back allowed for the dCGP expression") - .def( - "get_arity", +[](const expression &instance) { return v_to_l(instance.get_arity()); }, - "get_arity()\nget_arity(node_id)\nGets the arity of the basis functions of the dCGP expression. Either " - "the whole vector or that of a single node.") - .def( - "get_arity", +[](const expression &instance, unsigned node_id) { return instance.get_arity(node_id); }, - (bp::arg("node_id"))) - .def( - "get_gene_idx", +[](const expression &instance) { return v_to_l(instance.get_gene_idx()); }, - "get_gene_idx()\nGets a vector containing the indexes in the chromosome where each node starts to be " - "expressed.") - .def( - "get_f", +[](const expression &instance) { return v_to_l(instance.get_f()); }, - "Gets the kernel functions") - .def( - "mutate", +[](expression &instance, const bp::object &in) { instance.mutate(l_to_v(in)); }, - expression_mutate_doc().c_str(), bp::arg("idxs")) - .def("mutate_random", &expression::mutate_random, - "mutate_random(N = 1)\nMutates N randomly selected genes within its allowed bounds", bp::arg("N")) - .def("mutate_active", &expression::mutate_active, - "mutate_active(N = 1)\nMutates N randomly selected active genes within their allowed bounds", - (bp::arg("N") = 1)) - .def("mutate_active_cgene", &expression::mutate_active_cgene, - "mutate_active_cgene(N = 1)\nMutates N randomly selected active connections within their allowed bounds", - (bp::arg("N") = 1)) - .def("mutate_ogene", &expression::mutate_ogene, - "mutate_ogene(N = 1)\nMutates N randomly selected output genes connection within their allowed bounds", - (bp::arg("N") = 1)) - .def( - "mutate_active_fgene", &expression::mutate_active_fgene, - "mutate_active_fgene(N = 1)\nMutates N randomly selected active function genes within their allowed bounds", - (bp::arg("N") = 1)) - .def( - "loss", - +[](const expression &instance, const bp::object &points, const bp::object &labels, - const std::string &loss, - unsigned parallel) { return instance.loss(to_vv(points), to_vv(labels), loss, parallel); }, - expression_loss_doc().c_str(), - (bp::arg("points"), bp::arg("labels"), bp::arg("loss"), bp::arg("parallel") = 0u)) - .add_property( - "eph_val", +[](const expression &instance) { return v_to_l(instance.get_eph_val()); }, - +[](expression &instance, const bp::object &eph_val) { instance.set_eph_val(l_to_v(eph_val)); }) - .add_property( - "eph_symb", +[](const expression &instance) { return v_to_l(instance.get_eph_symb()); }, - +[](expression &instance, const bp::object &eph_symb) { - instance.set_eph_symb(l_to_v(eph_symb)); - }); -} - -template -void expose_expression_weighted(std::string type) -{ - std::string class_name = "expression_weighted_" + type; - bp::class_, bp::bases>>(class_name.c_str(), bp::no_init) - // Constructor with seed - .def("__init__", - bp::make_constructor( - +[](unsigned in, unsigned out, unsigned rows, unsigned cols, unsigned levelsback, - const bp::object &arity, const bp::object &kernels, unsigned seed) { - auto kernels_v = l_to_v>(kernels); - bp::extract is_int(arity); - if (is_int.check()) { // arity is passed as an integer - unsigned ar = bp::extract(arity); - return ::new expression_weighted(in, out, rows, cols, levelsback, ar, kernels_v, seed); - } else { // arity is passed as something else, a list is assumed - auto varity = l_to_v(arity); - return ::new expression_weighted(in, out, rows, cols, levelsback, varity, kernels_v, seed); - } - }, - bp::default_call_policies(), - (bp::arg("inputs"), bp::arg("outputs"), bp::arg("rows"), bp::arg("cols"), bp::arg("levels_back"), - bp::arg("arity"), bp::arg("kernels"), bp::arg("seed"))), - expression_init_doc(type).c_str()) - // Constructor with no seed - .def("__init__", - bp::make_constructor( - +[](unsigned in, unsigned out, unsigned rows, unsigned cols, unsigned levelsback, - const bp::object &arity, const bp::object &kernels) { - auto kernels_v = l_to_v>(kernels); - bp::extract is_int(arity); - if (is_int.check()) { // arity is passed as an integer - unsigned ar = bp::extract(arity); - return ::new expression_weighted(in, out, rows, cols, levelsback, ar, kernels_v, - std::random_device()()); - } else { // arity is passed as something else, a list is assumed - auto varity = l_to_v(arity); - return ::new expression_weighted(in, out, rows, cols, levelsback, varity, kernels_v, - std::random_device()()); - } - }, - bp::default_call_policies(), - (bp::arg("inputs"), bp::arg("outputs"), bp::arg("rows"), bp::arg("cols"), bp::arg("levels_back"), - bp::arg("arity"), bp::arg("kernels"))), - expression_init_doc(type).c_str()) - .def( - "__repr__", - +[](const expression_weighted &instance) -> std::string { - std::ostringstream oss; - oss << instance; - return oss.str(); - }) - .def( - "__call__", - +[](const expression_weighted &instance, const bp::object &in) { - try { - auto v = l_to_v(in); - return v_to_l(instance(v)); - } catch (...) { - PyErr_Clear(); - auto v = l_to_v(in); - return v_to_l(instance(v)); - } - }) - .def("set_weight", &expression_weighted::set_weight, expression_weighted_set_weight_doc().c_str(), - (bp::arg("node_id"), bp::arg("input_id"), bp::arg("weight"))) - .def( - "set_weights", - +[](expression_weighted &instance, const bp::object &weights) { - instance.set_weights(l_to_v(weights)); - }, - expression_weighted_set_weights_doc().c_str(), (bp::arg("weights"))) - .def("get_weight", &expression_weighted::get_weight, expression_weighted_get_weight_doc().c_str(), - (bp::arg("node_id"), bp::arg("input_id"))) - .def( - "get_weights", +[](expression_weighted &instance) { return v_to_l(instance.get_weights()); }, - "Gets all weights"); -} - -template -void expose_expression_ann(std::string type) -{ - std::string class_name = "expression_ann_" + type; - bp::class_>>(class_name.c_str(), bp::no_init) - // Constructor with seed - .def("__init__", - bp::make_constructor( - +[](unsigned in, unsigned out, unsigned rows, unsigned cols, unsigned levelsback, - const bp::object &arity, const bp::object &kernels, unsigned seed) { - auto kernels_v = l_to_v>(kernels); - bp::extract is_int(arity); - if (is_int.check()) { // arity is passed as an integer - unsigned ar = bp::extract(arity); - return ::new expression_ann(in, out, rows, cols, levelsback, ar, kernels_v, seed); - } else { // arity is passed as something else, a list is assumed - auto varity = l_to_v(arity); - return ::new expression_ann(in, out, rows, cols, levelsback, varity, kernels_v, seed); - } - }, - bp::default_call_policies(), - (bp::arg("inputs"), bp::arg("outputs"), bp::arg("rows"), bp::arg("cols"), bp::arg("levels_back"), - bp::arg("arity"), bp::arg("kernels"), bp::arg("seed"))), - expression_init_doc(type).c_str()) - // Constructor with no seed - .def("__init__", - bp::make_constructor( - +[](unsigned in, unsigned out, unsigned rows, unsigned cols, unsigned levelsback, - const bp::object &arity, const bp::object &kernels) { - auto kernels_v = l_to_v>(kernels); - bp::extract is_int(arity); - if (is_int.check()) { // arity is passed as an integer - unsigned ar = bp::extract(arity); - return ::new expression_ann(in, out, rows, cols, levelsback, ar, kernels_v, - std::random_device()()); - } else { // arity is passed as something else, a list is assumed - auto varity = l_to_v(arity); - return ::new expression_ann(in, out, rows, cols, levelsback, varity, kernels_v, - std::random_device()()); - } - }, - bp::default_call_policies(), - (bp::arg("inputs"), bp::arg("outputs"), bp::arg("rows"), bp::arg("cols"), bp::arg("levels_back"), - bp::arg("arity"), bp::arg("kernels"))), - expression_init_doc(type).c_str()) - .def( - "__repr__", - +[](const expression_ann &instance) -> std::string { - std::ostringstream oss; - oss << instance; - return oss.str(); - }) - .def( - "__call__", - +[](const expression_ann &instance, const bp::object &in) { - try { - auto v = l_to_v(in); - return v_to_l(instance(v)); - } catch (...) { - PyErr_Clear(); - auto v = l_to_v(in); - return v_to_l(instance(v)); - } - }) - .def("set_bias", &expression_ann::set_bias, expression_ann_set_bias_doc().c_str(), - (bp::arg("node_id"), bp::arg("bias"))) - .def( - "set_biases", - +[](expression_ann &instance, const bp::object &biases) { instance.set_biases(l_to_v(biases)); }, - expression_ann_set_biases_doc().c_str(), (bp::arg("biases"))) - .def("get_bias", &expression_ann::get_bias, expression_ann_get_bias_doc().c_str(), (bp::arg("node_id"))) - .def( - "get_biases", +[](expression_ann &instance) { return v_to_l(instance.get_biases()); }, "Gets all biases") - .def( - "set_weight", +[](expression_ann &instance, unsigned idx, double w) { instance.set_weight(idx, w); }, - (bp::arg("idx"), bp::arg("value"))) - .def( - "set_weight", - +[](expression_ann &instance, unsigned node_id, unsigned input_id, double w) { - instance.set_weight(node_id, input_id, w); - }, - expression_ann_set_weight_doc().c_str(), (bp::arg("node_id"), bp::arg("input_id"), bp::arg("value"))) - .def( - "set_weights", - +[](expression_ann &instance, const bp::object &weights) { instance.set_weights(l_to_v(weights)); }, - expression_weighted_set_weights_doc().c_str(), (bp::arg("weights"))) - .def("set_output_f", &expression_ann::set_output_f, expression_ann_set_output_f_doc().c_str(), - (bp::arg("f_id"))) - .def( - "get_weight", +[](expression_ann &instance, unsigned idx) { return instance.get_weight(idx); }, - (bp::arg("idx"))) - .def( - "get_weight", - +[](expression_ann &instance, unsigned node_id, unsigned input_id) { - return instance.get_weight(node_id, input_id); - }, - expression_ann_get_weight_doc().c_str(), (bp::arg("node_id"), bp::arg("input_id"))) - .def( - "get_weights", +[](expression_ann &instance) { return v_to_l(instance.get_weights()); }, "Gets all weights") - .def("n_active_weights", &expression_ann::n_active_weights, expression_ann_n_active_weights_doc().c_str(), - bp::arg("unique") = false) - .def( - "randomise_weights", - +[](expression_ann &instance, double mean, double std, unsigned seed) { - return instance.randomise_weights(mean, std, seed); - }, - expression_ann_randomise_weights_doc().c_str(), - (bp::arg("mean") = 0., bp::arg("std") = 0.1, bp::arg("seed"))) - .def( - "randomise_weights", - +[](expression_ann &instance, double mean, double std) { - return instance.randomise_weights(mean, std, std::random_device()()); - }, - (bp::arg("mean") = 0., bp::arg("std") = 0.1)) - .def( - "randomise_biases", - +[](expression_ann &instance, double mean, double std, unsigned seed) { - return instance.randomise_biases(mean, std, seed); - }, - expression_ann_randomise_biases_doc().c_str(), - (bp::arg("mean") = 0., bp::arg("std") = 0.1, bp::arg("seed"))) - .def( - "randomise_biases", - +[](expression_ann &instance, double mean, double std) { - return instance.randomise_biases(mean, std, std::random_device()()); - }, - (bp::arg("mean") = 0., bp::arg("std") = 0.1)) - .def( - "sgd", - +[](expression_ann &instance, const bp::object &points, const bp::object &labels, double l_rate, - unsigned batch_size, const std::string &loss, unsigned parallel, bool shuffle) { - auto d = to_vv(points); - auto l = to_vv(labels); - return instance.sgd(d, l, l_rate, batch_size, loss, parallel, shuffle); - }, - expression_ann_sgd_doc().c_str(), - (bp::arg("points"), bp::arg("labels"), bp::arg("lr"), bp::arg("batch_size"), bp::arg("loss"), - bp::arg("parallel") = 0u, bp::arg("shuffle") = true)); -} +namespace pg = pygmo; BOOST_PYTHON_MODULE(core) { @@ -481,34 +42,14 @@ BOOST_PYTHON_MODULE(core) doc_options.disable_cpp_signatures(); doc_options.disable_py_signatures(); - expose_kernel("double"); - expose_kernel_set("double"); - expose_expression("double"); - expose_expression_weighted("double"); - expose_expression_ann("double"); - - expose_kernel("gdual_double"); - expose_kernel_set("gdual_double"); - expose_expression("gdual_double"); - expose_expression_weighted("gdual_double"); - - expose_kernel("gdual_vdouble"); - expose_kernel_set("gdual_vdouble"); - expose_expression("gdual_vdouble"); - expose_expression_weighted("gdual_vdouble"); + // Registers dcgpy as a pygmo affiliated package, so that upon import will add itself + // to the cereal serialization dictionary + pg::register_ap(); - // Define a cleanup functor to be run when the module is unloaded. - struct dcgp_cleanup_functor { - void operator()() const - { - std::cout << "Shutting down the thread pool.\n"; - piranha::thread_pool_shutdown(); - } - }; - // Expose it. - bp::class_ cl_c("_dcgp_cleanup_functor", bp::init<>()); - cl_c.def("__call__", &dcgp_cleanup_functor::operator()); - // Register it. - bp::object atexit_mod = bp::import("atexit"); - atexit_mod.attr("register")(dcgp_cleanup_functor{}); + // Expose all expressions + dcgpy::expose_expressions(); + // Expose all kernels and kernel_sets + dcgpy::expose_kernels(); + // Expose Symbolic Regression Stuff + dcgpy::expose_symbolic_regression(); } diff --git a/dcgpy/docstrings.cpp b/dcgpy/docstrings.cpp index 20b0081f..19b15884 100644 --- a/dcgpy/docstrings.cpp +++ b/dcgpy/docstrings.cpp @@ -39,7 +39,7 @@ Constructs a set of common kernel functions from their common name. The kernel functions can be then retrieved via the call operator. Args: - kernels (``List[string]``): a list of strings indicating names of kernels to use. The following are available: "sum", "diff", "mul", "div", "sig", "sin", "log", "exp" + kernels (``list`` of ``string``): a list of strings indicating names of kernels to use. The following are available: "sum", "diff", "mul", "div", "sig", "sin", "log", "exp" Examples: @@ -70,7 +70,8 @@ Constructs a CGP expression operating on )" seed (``int``): random seed to generate mutations and chromosomes Attributes: - eph_val (list(```))" + type + R"(```): Values of the ephemeral constants. + eph_val (list(```))" + + type + R"(```): Values of the ephemeral constants. eph_symb (list(``str``)): Symbols used for the ephemeral constants. Examples: @@ -110,15 +111,14 @@ Adds one more kernel to the set. std::string expression_loss_doc() { - return R"(loss(points, labels, loss_type, parallel=True) + return R"(loss(points, labels, loss_type) Computes the loss of the model on the data Args: points (2D NumPy float array or ``list of lists`` of ``float``): the input data labels (2D NumPy float array or ``list of lists`` of ``float``): the output labels (supervised signal) - loss_type (a ``str``): the loss, one of "MSE" for Mean Square Error and "CE" for Cross-Entropy. - parallel (a ``int``): sets the grain for parallelism. 0 -> no parallelism n -> divides the data into n parts and processes them in parallel threads + loss_type (``str``): the loss, one of "MSE" for Mean Square Error and "CE" for Cross-Entropy. Raises: ValueError: if *points* or *labels* are malformed or if *loss_type* is not one of the available types. @@ -132,7 +132,7 @@ std::string expression_set_doc() Sets the chromosome. Args: - chromosome (a ``List[int]``): the new chromosome + chromosome (``List[int]``): the new chromosome Raises: ValueError: if the the chromosome is incompatible with the expression (n.inputs, n.outputs, levels-back, etc.) @@ -146,8 +146,8 @@ std::string expression_set_f_gene_doc() Sets for a valid node (i.e. not an input node) a new kernel. Args: - node_id (a ``List[int]``): the node id - f_id (a ``List[int]``): the kernel id + node_id (``List[int]``): the node id + f_id (``List[int]``): the kernel id Raises: @@ -162,7 +162,7 @@ std::string expression_mutate_doc() Mutates multiple genes within their allowed bounds. Args: - idxs (a ``List[int]``): indexes of the genes to me mutated + idxs (``List[int]``): indexes of the genes to me mutated Raises: ValueError: if the index of a gene is out of bounds @@ -179,9 +179,9 @@ Sets a weight. Convention adopted for node numbering: http://ppsn2014.ijs.si/files/slides/ppsn2014-tutorial3-miller.pdf Args: - node_id (an ``int``): the id of the node whose weight is being set - input_id (an ``int``): the id of the node input (0 for the first one up to arity-1) - weight (a ``float``): the new value of the weight + node_id (``int``): the id of the node whose weight is being set + input_id (``int``): the id of the node input (0 for the first one up to arity-1) + weight (``float``): the new value of the weight Raises: ValueError: if *node_id* or *input_id* are not valid @@ -195,7 +195,7 @@ std::string expression_weighted_set_weights_doc() Sets all weights. Args: - weights (a ``List[float]``): the new values of the weights + weights (``List[float]``): the new values of the weights Raises: ValueError: if the input vector dimension is not valid (r*c*arity) @@ -212,8 +212,8 @@ Gets a weight. Convention adopted for node numbering: http://ppsn2014.ijs.si/files/slides/ppsn2014-tutorial3-miller.pdf Args: - node_id (an ``int``): the id of the node - input_id (an ``int``): the id of the node input (0 for the first one up to arity-1) + node_id (``int``): the id of the node + input_id (``int``): the id of the node input (0 for the first one up to arity-1) Returns: The value of the weight (a ``float``) @@ -235,10 +235,10 @@ to be less than the arity), or directly specifying its position in the weight ve Convention adopted for node numbering: http://ppsn2014.ijs.si/files/slides/ppsn2014-tutorial3-miller.pdf Args: - node_id (an ``int``): the id of the node whose weight is being set - input_id (an ``int``): the id of the node input (0 for the first one up to arity-1) - weight (a ``float``): the new value of the weight - idx (an ``int``): the idx of weight to be set + node_id (``int``): the id of the node whose weight is being set + input_id (``int``): the id of the node input (0 for the first one up to arity-1) + weight (``float``): the new value of the weight + idx (``int``): the idx of weight to be set Raises: ValueError: if *node_id* or *input_id* or *idx* are not valid @@ -257,11 +257,11 @@ to be less than the arity), or directly specifying its position in the weight ve Convention adopted for node numbering: http://ppsn2014.ijs.si/files/slides/ppsn2014-tutorial3-miller.pdf Args: - node_id (an ``int``): the id of the node - input_id (an ``int``): the id of the node input (0 for the first one up to arity-1) + node_id (``int``): the id of the node + input_id (``int``): the id of the node input (0 for the first one up to arity-1) Returns: - The value of the weight (a ``float``) + The value of the weight (``float``) Raises: ValueError: if *node_id* or *input_id* or *idx* are not valid @@ -275,9 +275,9 @@ std::string expression_ann_randomise_weights_doc() Randomises all the values for the weights using a normal distribution. Args: - mean (a ``float``): the mean of the normal distribution. - std (a ``float``): the standard deviation of the normal distribution. - seed (an ``int``): the random seed to use. + mean (``float``): the mean of the normal distribution. + std (``float``): the standard deviation of the normal distribution. + seed (``int``): the random seed to use. )"; } @@ -291,8 +291,8 @@ Sets a bias. Convention adopted for node numbering: http://ppsn2014.ijs.si/files/slides/ppsn2014-tutorial3-miller.pdf Args: - node_id (an ``int``): the id of the node whose weight is being set - weight (a ``float``): the new value of the weight + node_id (``int``): the id of the node whose weight is being set + weight (``float``): the new value of the weight Raises: ValueError: if *node_id* is not valid @@ -306,7 +306,7 @@ std::string expression_ann_set_biases_doc() Sets all biases. Args: - biases (a ``List[float]``): the new values of the biases + biases (``List[float]``): the new values of the biases Raises: ValueError: if the input vector dimension is not valid (r*c) @@ -323,7 +323,7 @@ Gets a bias. Convention adopted for node numbering: http://ppsn2014.ijs.si/files/slides/ppsn2014-tutorial3-miller.pdf Args: - node_id (an ``int``): the id of the node + node_id (``int``): the id of the node Returns: The value of the bias (a ``float``) @@ -340,9 +340,9 @@ std::string expression_ann_randomise_biases_doc() Randomises all the values for the biases using a normal distribution. Args: - mean (a ``float``): the mean of the normal distribution. - std (a ``float``): the standard deviation of the normal distribution. - seed (an ``int``): the random seed to use. + mean (``float``): the mean of the normal distribution. + std (``float``): the standard deviation of the normal distribution. + seed (``int``): the random seed to use. )"; } @@ -356,15 +356,15 @@ Performs one epoch of mini-batch (stochastic) gradient descent updating the weig Args: points (2D NumPy float array or ``list of lists`` of ``float``): the input data labels (2D NumPy float array or ``list of lists`` of ``float``): the output labels (supervised signal) - lr (a ``float``): the learning generate - batch_size (an ``int``): the batch size - loss_type (a ``str``): the loss, one of "MSE" for Mean Square Error and "CE" for Cross-Entropy. - parallel (a ``int``): sets the grain for parallelism. 0 -> no parallelism n -> divides the data into n parts and processes them in parallel threads - shuffle (a ``bool``): when True it shuffles the points and labels before performing one epoch of training. + lr (``float``): the learning generate + batch_size (``int``): the batch size + loss_type (``str``): the loss, one of "MSE" for Mean Square Error and "CE" for Cross-Entropy. + parallel (``int``): sets the grain for parallelism. 0 -> no parallelism n -> divides the data into n parts and processes them in parallel threads + shuffle (``bool``): when True it shuffles the points and labels before performing one epoch of training. Returns: - The average error across the batches a (``float``). Note: this is only a proxy for the real loss on the whole data set. + The average error across the batches (``float``). Note: this is only a proxy for the real loss on the whole data set. Raises: ValueError: if *points* or *labels* are malformed or if *loss_type* is not one of the available types. @@ -381,7 +381,7 @@ and hence the output layer should have some sigmoid or tanh nonlinearity, or in layer by having a sum in all output neurons. Args: - name (a ``string``): the kernel name + name (``string``): the kernel name Raises: ValueError: if *name* is not one of the kernels in the expression. @@ -397,7 +397,835 @@ of weights that are updated when calling sgd. The number of active weights, as w the number of active nodes, define the complexity of the expression expressed by the chromosome. Args: - unique (a ``bool``): when True weights are counted only once if connecting the same two nodes. + unique (``bool``): when True weights are counted only once if connecting the same two nodes. )"; } + +std::string generate_koza_quintic_doc() +{ + return R"( + +Generates the data for the classic Koza quintic regression problem. + +.. math:: + y = x^5 - 2 x^3 + x + +x is sampled in ten equally spaced points in [-3,3]. + +Returns: + A tuple containing the points (``2D NumPy float array``) and labels (``2D NumPy float array``). + +Examples: + +>>> from dcgpy import * +>>> import matplotlib.pyplot as plt +>>> X, Y = generate_koza_quintic() +>>> plt.plot(X,Y, '.') + )"; +} + +std::string generate_P1_doc() +{ + return R"( + +Generates the problem P1 from the paper: + +Izzo, Dario, Francesco Biscani, and Alessio Mereta. "Differentiable genetic programming." +European Conference on Genetic Programming. Springer, 2017. + +The functional form of such a problem is: + +.. math:: + y = x^5 - \pi x^3 + x + +x is sampled in ten equally spaced points in [1,3]. + +Returns: + A tuple containing the points (``2D NumPy float array``) and labels (``2D NumPy float array``). + +Examples: + +>>> from dcgpy import * +>>> import matplotlib.pyplot as plt +>>> X, Y = generate_P1() +>>> plt.plot(X,Y, '.') + )"; +} + +std::string generate_P2_doc() +{ + return R"( + +Generates the problem P2 from the paper: + +Izzo, Dario, Francesco Biscani, and Alessio Mereta. "Differentiable genetic programming." +European Conference on Genetic Programming. Springer, 2017. + +The functional form of such a problem is: + +.. math:: + y = x^5 - \pi x^3 + \frac{\pi}{x} + +x is sampled in ten equally spaced points in [0.1,5]. + +Returns: + A tuple containing the points (``2D NumPy float array``) and labels (``2D NumPy float array``). + +Examples: + +>>> from dcgpy import * +>>> import matplotlib.pyplot as plt +>>> X, Y = generate_P2() +>>> plt.plot(X,Y, '.') + )"; +} + +std::string generate_P3_doc() +{ + return R"( + +Generates the problem P3 from the paper: + +Izzo, Dario, Francesco Biscani, and Alessio Mereta. "Differentiable genetic programming." +European Conference on Genetic Programming. Springer, 2017. + +The functional form of such a problem is: + +.. math:: + y = \frac{e x^5 + x^3}{x+1} + +x is sampled in ten equally spaced points in [-0.9,1]. + +Returns: + A tuple containing the points (``2D NumPy float array``) and labels (``2D NumPy float array``). + +Examples: + +>>> from dcgpy import * +>>> import matplotlib.pyplot as plt +>>> X, Y = generate_P3() +>>> plt.plot(X,Y, '.') + )"; +} + +std::string generate_P4_doc() +{ + return R"( + +Generates the problem P4 from the paper: + +Izzo, Dario, Francesco Biscani, and Alessio Mereta. "Differentiable genetic programming." +European Conference on Genetic Programming. Springer, 2017. + +The functional form of such a problem is: + +.. math:: + y = \sin(\pi x) + \frac 1x + +x is sampled in ten equally spaced points in [-1,1]. + +Returns: + A tuple containing the points (``2D NumPy float array``) and labels (``2D NumPy float array``). + +Examples: + +>>> from dcgpy import * +>>> import matplotlib.pyplot as plt +>>> X, Y = generate_P4() +>>> plt.plot(X,Y, '.') + )"; +} + +std::string generate_P5_doc() +{ + return R"( + +Generates the problem P5 from the paper: + +Izzo, Dario, Francesco Biscani, and Alessio Mereta. "Differentiable genetic programming." +European Conference on Genetic Programming. Springer, 2017. + +The functional form of such a problem is: + +.. math:: + y = e x^5 - \pi x^3 + x + +x is sampled in ten equally spaced points in [1,3]. + +Returns: + A tuple containing the points (``2D NumPy float array``) and labels (``2D NumPy float array``). + +Examples: + +>>> from dcgpy import * +>>> import matplotlib.pyplot as plt +>>> X, Y = generate_P5() +>>> plt.plot(X,Y, '.') + )"; +} + +std::string generate_P6_doc() +{ + return R"( + +Generates the problem P6 from the paper: + +Izzo, Dario, Francesco Biscani, and Alessio Mereta. "Differentiable genetic programming." +European Conference on Genetic Programming. Springer, 2017. + +The functional form of such a problem is: + +.. math:: + y = \frac{e x^2 - 1}{\pi (x + 2)} + +x is sampled in ten equally spaced points in [-2.1,1]. + +Returns: + A tuple containing the points (``2D NumPy float array``) and labels (``2D NumPy float array``). + +Examples: + +>>> from dcgpy import * +>>> import matplotlib.pyplot as plt +>>> X, Y = generate_P6() +>>> plt.plot(X,Y, '.') + )"; +} + +std::string generate_P7_doc() +{ + return R"( + +Generates the problem P7 from the paper: + +Izzo, Dario, Francesco Biscani, and Alessio Mereta. "Differentiable genetic programming." +European Conference on Genetic Programming. Springer, 2017. + +The functional form of such a problem is: + +.. math:: + y = \cos(\pi x) + \sin(e x) + +x is sampled in ten equally spaced points in [-1,1]. + +Returns: + A tuple containing the points (``2D NumPy float array``) and labels (``2D NumPy float array``). + +Examples: + +>>> from dcgpy import * +>>> import matplotlib.pyplot as plt +>>> X, Y = generate_P7() +>>> plt.plot(X,Y, '.') + )"; +} + +std::string generate_kotanchek_doc() +{ + return R"( + +Generates the problem Kotanchek from the paper: + +Vladislavleva, Ekaterina J., Guido F. Smits, and Dick Den Hertog. +"Order of nonlinearity as a complexity measure for models generated by symbolic regression via pareto genetic +programming." IEEE Transactions on Evolutionary Computation 13.2 (2008): 333-349. + +The functional form of such a problem is: + +.. math:: + y = \frac{e^{-(x_1-1)^2}}{1.2+(x_2-2.5)^2} + +:math:`x_1` and :math:`x_2` are sampled in one hundred randomly selected points in [0.3,4]x[0.3,4]. + +Returns: + A tuple containing the points (``2D NumPy float array``) and labels (``2D NumPy float array``). + +Examples: + +>>> from dcgpy import * +>>> from mpl_toolkits.mplot3d import Axes3D +>>> import matplotlib.pyplot as plt +>>> X, Y = generate_kotanchek() +>>> fig = plt.figure() +>>> ax = fig.gca(projection='3d') +>>> ax.scatter(X[:,0], X[:,1], Y) + )"; +} + +std::string generate_salutowicz_doc() +{ + return R"( + +Generates the problem Salutowicz from the paper: + +Vladislavleva, Ekaterina J., Guido F. Smits, and Dick Den Hertog. +"Order of nonlinearity as a complexity measure for models generated by symbolic regression via pareto genetic +programming." IEEE Transactions on Evolutionary Computation 13.2 (2008): 333-349. + +The functional form of such a problem is: + +.. math:: + y = e^{-x} x^3 \cos x\sin x (\cos x \sin^2 x - 1) + +x is sampled in one hundred points uniformly sampled in [0.5,10]. + +Returns: + A tuple containing the points (``2D NumPy float array``) and labels (``2D NumPy float array``). + +Examples: + +>>> from dcgpy import * +>>> import matplotlib.pyplot as plt +>>> X, Y = generate_salutowicz() +>>> plt.plot(X,Y, '.') + )"; +} + +std::string generate_salutowicz2d_doc() +{ + return R"( + +Generates the problem Salutowicz2D from the paper: + +Vladislavleva, Ekaterina J., Guido F. Smits, and Dick Den Hertog. +"Order of nonlinearity as a complexity measure for models generated by symbolic regression via pareto genetic +programming." IEEE Transactions on Evolutionary Computation 13.2 (2008): 333-349. + +The functional form of such a problem is: + +.. math:: + y = e^{-x} x^3 \cos x_1\sin x_1 (\cos x_1 \sin^2 x_1 - 1) * (x_2 - 5) + +:math:`x_1` and :math:`x_2` are sampled in 601 randomly selected points in [0.05,10]x[0.05,10]. + +Returns: + A tuple containing the points (``2D NumPy float array``) and labels (``2D NumPy float array``). + +Examples: + +>>> from dcgpy import * +>>> from mpl_toolkits.mplot3d import Axes3D +>>> import matplotlib.pyplot as plt +>>> X, Y = generate_kotanchek() +>>> fig = plt.figure() +>>> ax = fig.gca(projection='3d') +>>> ax.scatter(X[:,0], X[:,1], Y) + )"; +} + +std::string generate_uball5d_doc() +{ + return R"( + +Generates the problem UBall5D from the paper: + +Vladislavleva, Ekaterina J., Guido F. Smits, and Dick Den Hertog. +"Order of nonlinearity as a complexity measure for models generated by symbolic regression via pareto genetic +programming." IEEE Transactions on Evolutionary Computation 13.2 (2008): 333-349. + +The functional form of such a problem is: + +.. math:: + y = \frac{10}{5 + \sum_{i=1}^5 (x_i-3)^2} + +:math:`x_i` are sampled in 1024 randomly selected points in :math:`[0.05,6.05]^5`. + +Returns: + A tuple containing the points (``2D NumPy float array``) and labels (``2D NumPy float array``). + +Examples: + +>>> from dcgpy import * +>>> import matplotlib.pyplot as plt +>>> X, Y = generate_uball5d() +>>> plt.plot(X,Y, '.') + )"; +} + +std::string generate_ratpol3d_doc() +{ + return R"( + +Generates the problem RatPol3D from the paper: + +Vladislavleva, Ekaterina J., Guido F. Smits, and Dick Den Hertog. +"Order of nonlinearity as a complexity measure for models generated by symbolic regression via pareto genetic +programming." IEEE Transactions on Evolutionary Computation 13.2 (2008): 333-349. + +The functional form of such a problem is: + +.. math:: + y = 30 \frac{(x_1 - 3)(x_3 - 1)}{x_2^2(x_1-10)} + +:math:`x_1`, :math:`x_2`, :math:`x_3` are sampled in 300 randomly selected points in [0.05,2] x [1,2]. + +Returns: + A tuple containing the points (``2D NumPy float array``) and labels (``2D NumPy float array``). + +Examples: + +>>> from dcgpy import * +>>> import matplotlib.pyplot as plt +>>> X, Y = generate_ratpol3d() +>>> plt.plot(X,Y, '.') + )"; +} + +std::string generate_sinecosine_doc() +{ + return R"( + +Generates the problem SineCosine from the paper: + +Vladislavleva, Ekaterina J., Guido F. Smits, and Dick Den Hertog. +"Order of nonlinearity as a complexity measure for models generated by symbolic regression via pareto genetic +programming." IEEE Transactions on Evolutionary Computation 13.2 (2008): 333-349. + +The functional form of such a problem is: + +.. math:: + y = 6 \sin(x_1)\cos(x_2) + +:math:`x_1`, :math:`x_2` are sampled in 30 randomly selected points in [0.1,5.9] x [0.1,5.9]. + +Returns: + A tuple containing the points (``2D NumPy float array``) and labels (``2D NumPy float array``). + +Examples: + +>>> from dcgpy import * +>>> from mpl_toolkits.mplot3d import Axes3D +>>> import matplotlib.pyplot as plt +>>> fig = plt.figure() +>>> ax = fig.gca(projection='3d') +>>> ax.scatter(X[:,0], X[:,1], Y) + )"; +} + +std::string generate_ripple_doc() +{ + return R"( + +Generates the problem Ripple from the paper: + +Vladislavleva, Ekaterina J., Guido F. Smits, and Dick Den Hertog. +"Order of nonlinearity as a complexity measure for models generated by symbolic regression via pareto genetic +programming." IEEE Transactions on Evolutionary Computation 13.2 (2008): 333-349. + +The functional form of such a problem is: + +.. math:: + y = (x_1-3)(x_2-3) + 2\sin((x_1-4)(x_2-4)) + +:math:`x_1`, :math:`x_2` are sampled in 300 randomly selected points in [0.05,6.05] x [0.05,6.05]. + +Returns: + A tuple containing the points (``2D NumPy float array``) and labels (``2D NumPy float array``). + +Examples: + +>>> from dcgpy import * +>>> from mpl_toolkits.mplot3d import Axes3D +>>> import matplotlib.pyplot as plt +>>> fig = plt.figure() +>>> ax = fig.gca(projection='3d') +>>> ax.scatter(X[:,0], X[:,1], Y) + )"; +} + +std::string generate_ratpol2d_doc() +{ + return R"( + +Generates the problem RatPol2D from the paper: + +Vladislavleva, Ekaterina J., Guido F. Smits, and Dick Den Hertog. +"Order of nonlinearity as a complexity measure for models generated by symbolic regression via pareto genetic +programming." IEEE Transactions on Evolutionary Computation 13.2 (2008): 333-349. + +The functional form of such a problem is: + +.. math:: + y = \frac{(x_1-3)^4+(x_2-3)^3-(x_2-3)}{(x_2-2)^4+10} + +:math:`x_1`, :math:`x_2` are sampled in 50 randomly selected points in [0.05,6.05] x [0.05,6.05]. + +Returns: + A tuple containing the points (``2D NumPy float array``) and labels (``2D NumPy float array``). + +Examples: + +>>> from dcgpy import * +>>> from mpl_toolkits.mplot3d import Axes3D +>>> import matplotlib.pyplot as plt +>>> fig = plt.figure() +>>> ax = fig.gca(projection='3d') +>>> ax.scatter(X[:,0], X[:,1], Y) + )"; +} + +std::string generate_chwirut1_doc() +{ + return R"( + +These data are the result of a NIST study involving ultrasonic calibration. The response variable is ultrasonic response, +and the predictor variable is metal distance. (see https://www.itl.nist.gov/div898/strd/nls/data/chwirut1.shtml) + +A proposed good model for such a problem is: + +.. math:: + y = \frac{e^{-\beta_1 x}}{\beta_2 + \beta_3 x} + \epsilon + +Returns: + A tuple containing the points (``2D NumPy float array``) and labels (``2D NumPy float array``). + +Examples: + +>>> from dcgpy import * +>>> import matplotlib.pyplot as plt +>>> X, Y = generate_chwirut1() +>>> plt.plot(X,Y, '.') + )"; +} + +std::string generate_chwirut2_doc() +{ + return R"( + +These data are the result of a NIST study involving ultrasonic calibration. The response variable is ultrasonic response, +and the predictor variable is metal distance. (see https://www.itl.nist.gov/div898/strd/nls/data/chwirut2.shtml) + +A proposed good model for such a problem is: + +.. math:: + y = \frac{e^{-\beta_1 x}}{\beta_2 + \beta_3 x} + \epsilon + +with respect to the problem chwirut1, less points are included here. + +Returns: + A tuple containing the points (``2D NumPy float array``) and labels (``2D NumPy float array``). + +Examples: + +>>> from dcgpy import * +>>> import matplotlib.pyplot as plt +>>> X, Y = generate_chwirut2() +>>> plt.plot(X,Y, '.') + )"; +} + +std::string generate_daniel_wood_doc() +{ + return R"( + +These data and model are described in Daniel and Wood (1980), and originally published in E.S.Keeping, +"Introduction to Statistical Inference," Van Nostrand Company, Princeton, NJ, 1962, p. 354. The response variable is energy +radieted from a carbon filament lamp per cm**2 per second, and the predictor variable is the absolute temperature +of the filament in 1000 degrees Kelvin. (see https://www.itl.nist.gov/div898/strd/nls/data/daniel_wood.shtml) + +A proposed good model for such a problem is: + +.. math:: + y = \beta_1 x^{\beta_2} + \epsilon + +Returns: + A tuple containing the points (``2D NumPy float array``) and labels (``2D NumPy float array``). + +Examples: + +>>> from dcgpy import * +>>> import matplotlib.pyplot as plt +>>> X, Y = generate_daniel_wood() +>>> plt.plot(X,Y, '.') + )"; +} + +std::string generate_gauss1_doc() +{ + return R"( + +The data are two well-separated Gaussians on a decaying exponential baseline plus normally +distributed zero-mean noise with variance = 6.25. (see https://www.itl.nist.gov/div898/strd/nls/data/gauss1.shtml) + +A proposed good model for such a problem is: + +.. math:: + y = \beta_1 e^{-\beta_2 x} + \beta_3 e^{-\frac{(x-\beta_4)^2}{\beta_5^2}} + \beta_6 e^{-\frac{(x-\beta_7)^2}{\beta_8^2}} + \epsilon + +Returns: + A tuple containing the points (``2D NumPy float array``) and labels (``2D NumPy float array``). + +Examples: + +>>> from dcgpy import * +>>> import matplotlib.pyplot as plt +>>> X, Y = generate_gauss1() +>>> plt.plot(X,Y, '.') + )"; +} + +std::string generate_kirby2_doc() +{ + return R"( + +These data are the result of a NIST study involving scanning electron microscope line with standards. 151 +observations are included. (see https://www.itl.nist.gov/div898/strd/nls/data/kirby2.shtml) + +A proposed good model for such a problem is: + +.. math:: + y = \frac{\beta_1 + \beta_2 x + \beta_3 x^2}{1 + \beta_4 x + \beta_5 x^2} + \epsilon + +Returns: + A tuple containing the points (``2D NumPy float array``) and labels (``2D NumPy float array``). + +Examples: + +>>> from dcgpy import * +>>> import matplotlib.pyplot as plt +>>> X, Y = generate_kirby2() +>>> plt.plot(X,Y, '.') + )"; +} + +std::string generate_lanczos2_doc() +{ + return R"( + +These data are taken from an example discussed in Lanczos (1956). The data were generated to 6-digits +of accuracy using the formula below. (see https://www.itl.nist.gov/div898/strd/nls/data/lanczos2.shtml) + +A good model for such a problem is, trivially: + +.. math:: + y = \beta_1 e^{-\beta_2 x} + \beta_3 e^{-\beta_4 x} + \beta_5 e^{-\beta_6 x} + \epsilon + +Returns: + A tuple containing the points (``2D NumPy float array``) and labels (``2D NumPy float array``). + +Examples: + +>>> from dcgpy import * +>>> import matplotlib.pyplot as plt +>>> X, Y = generate_lanczos2() +>>> plt.plot(X,Y, '.') + )"; +} + +std::string generate_misra1b_doc() +{ + return R"( + +These data are the result of a NIST study involving dental research in monomolecular adsorption. +The response variable is volume, and the predictor variable is pressure. 14 observations are +available. (see https://www.itl.nist.gov/div898/strd/nls/data/misra1b.shtml) + +A good model for such a problem is: + +.. math:: + y = \beta_1 \left( 1 - \frac 1{\left(1 + \beta_1 \frac x2\right)^2}\right) + \epsilon + +Returns: + A tuple containing the points (``2D NumPy float array``) and labels (``2D NumPy float array``). + +Examples: + +>>> from dcgpy import * +>>> import matplotlib.pyplot as plt +>>> X, Y = generate_misra1b() +>>> plt.plot(X,Y, '.') + )"; +} + +std::string symbolic_regression_doc() +{ + return R"( + +Symbolic regression is a type of regression analysis that searches the space of mathematical expressions to +find the model that best fits a given dataset, both in terms of accuracy and simplicity +(ref: https://en.wikipedia.org/wiki/Symbolic_regression). It also is one of the applications +for Differentiable Cartesian Genetic Programming. + +This class provides an easy way to instantiate symbolic regression problems as optimization problems having +a continuous part (i.e. the value of the parameters in the model) and an integer part (i.e. the representation of +the model computational graph). The instantiated object can be used as UDP (User Defined Problem) in the pygmo optimization suite. + +The symbolic regression problem can be instantiated both as a single and as a two-objectives problem. In the second +case, aside the Mean Squared Error, the model complexity will be considered as an objective. + + )"; +} + +std::string symbolic_regression_init_doc() +{ + return R"(__init__(points, labels, rows, columns, levels_back, arity, kernels, n_eph, multi_objective, parallel_batches=0) + +Constructs a symbolic_regression optimization problem compatible with the pagmo UDP interface. + +Args: + points (2D NumPy float array or ``list of lists`` of ``float``): the input data + labels (2D NumPy float array or ``list of lists`` of ``float``): the output data (to be predicted) + rows (``int``): number of rows in the cartesian program + columns (``int``): number of columns in the cartesian program + levels_back (``int``): number of levels-back in the cartesian program + arity (``int`` on ``list``): arity of the kernels. Assumed equal for all columns. + kernels (``List[dcgpy.kernel_]``): kernel functions + n_eph (``int``): Number of ephemeral constants. + multi_objective (``bool``): when True the problem will be considered as multiobjective (loss and model complexity). + parallel_batches (``int``): allows to split the data into batches for parallel evaluation. + +Raises: + unspecified: any exception thrown by failures at the intersection between C++ and Python (e.g., + type conversion errors, mismatched function signatures, etc.) + +Examples: + >>> import dcgpy + >>> import pygmo as pg + >>> X, Y = dcgpy.generate_koza_quintic() + >>> udp = dcgpy.symbolic_regression( + ... points = X, + ... labels = Y, + ... rows = 1, + ... cols = 20, + ... levels_back = 21, + ... arity = 2, + ... kernels = dcgpy.kernel_set_double(["sum", "diff"])(), + ... n_eph = 1, + ... multi_objective = True, + ... parallel_batches = 0) + >>> prob = pg.problem(udp) + >>> print(prob) # doctest: +NORMALIZE_WHITESPACE + Problem name: a CGP symbolic regression problem + Global dimension: 62 + Integer dimension: 61 + Fitness dimension: 2 + Number of objectives: 2 + Equality constraints dimension: 0 + Inequality constraints dimension: 0 + Lower bounds: [-10, 0, 0, 0, 0, ... ] + Upper bounds: [10, 1, 1, 1, 1, ... ] + Has batch fitness evaluation: false + + Has gradient: true + User implemented gradient sparsity: true + Expected gradients: 1 + Has hessians: true + User implemented hessians sparsity: true + Expected hessian components: [1, 1] + + Fitness evaluations: 0 + Gradient evaluations: 0 + Hessians evaluations: 0 + + Thread safety: basic + + Extra info: + Data dimension (in): 1 + Data dimension (out): 1 + Data size: 10 + Kernels: [sum, diff] +)"; +} + +std::string generic_uda_get_seed_doc() +{ + return R"(get_seed() +This method will return the random seed used internally by this uda. +Returns: + ``int``: the random seed of the population +)"; +} + +std::string es4cgp_get_log_doc() +{ + return R"(get_log() +Returns a log containing relevant parameters recorded during the last call to ``evolve()``. The log frequency depends +on the verbosity parameter (by default nothing is logged) which can be set calling the +method :func:`~pygmo.algorithm.set_verbosity()` on an :class:`~pygmo.algorithm` +constructed with a :class:`~dcgpy.es4cgp`. A verbosity of ``N`` implies a log +line each ``N`` generations. + +Returns: + ``list`` of ``tuples``: at each logged epoch, the values ``Gen``, ``Fevals``, ``Current best``, ``Best``, where: + + * ``Gen`` (``int``), generation number. + * ``Fevals`` (``int``), number of functions evaluation made. + * ``Best`` (``float``), the best fitness found. + * ``Constants`` (``list``), the current values for the ephemeral constants. + * ``Model`` (``string``), the string representation of the current best model +Examples: + >>> import dcgpy + >>> from pygmo import * + >>> + >>> algo = algorithm(es4cgp(gen = 500, limit = 20)) + >>> algo.set_verbosity(100) + >>> prob = problem(rosenbrock(10)) + >>> pop = population(prob, 20) + >>> pop = algo.evolve(pop) # doctest: +SKIP + Gen: Fevals: Best: Constants: Model: + 0 0 4087.68 [3.52114] [0] ... + 100 400 324.845 [3.61414] [2*x0**4] ... + 200 800 324.845 [3.61414] [2*x0**4] ... + 300 1200 165.212 [3.56702] [x0**2*(-x0 + 2*x0**2)] ... + 400 1600 28.814 [3.45813] [x0*(-x0 + x0**2*(-x0 + x0**2) - (-x0 + ... + 500 2000 10.5589 [3.59501] [x0*(-4*x0 + x0**2*(-x0 + x0**2) + x0**2 ... + 600 2400 2.2459 [3.44443] [x0*(-x0*c1 + x0**2*(-x0 + x0**2) + x0** ... + 700 2800 2.24378 [3.43364] [x0*(-x0*c1 + x0**2*(-x0 + x0**2) + x0** ... + 800 3200 2.24378 [3.43364] [x0*(-x0*c1 + x0**2*(-x0 + x0**2) + x0** ... + 900 3600 2.24378 [3.43364] [x0*(-x0*c1 + x0**2*(-x0 + x0**2) + x0** ... + 1000 4000 2.24374 [3.43618] [x0*(-x0*c1 + x0**2*(-x0 + x0**2) + x0** ... + 1100 4400 2.24372 [3.43479] [x0*(-x0*c1 + x0**2*(-x0 + x0**2) + x0** ... + 1200 4800 0.0697188 [3.35616] [x0*(x0 + x0**2*(-c1 + x0**2))] ... + 1300 5200 0.0254527 [3.37625] [x0*(x0 + x0**2*(-c1 + x0**2))] ... + >>> uda = algo.extract(es4cgp) + >>> uda.get_log() # doctest: +SKIP + [(1, 40, 183727.83934515435, 183727.83934515435), ... +See also the docs of the relevant C++ method :cpp:func:`dcgp::es4cgp::get_log()`. +)"; +} + +std::string es4cgp_doc() +{ + return R"(__init__(gen = 1, mut_n = 1, ftol = 1e-4, learn_constants = False, seed = random) + +Evolutionary strategies are popular global optimization meta-heuristics essentially based +on the following simple pseudo-algorithm: + +* Start from a population (pop) of dimension N + +* while i < gen + +* > > Mutation: create a new population pop2 mutating N times the best individual + +* > > Evaluate all new chromosomes in pop2 + +* > > Reinsertion: set pop to contain the best N individuals taken from pop and pop2 + +The key to the success of such a search strategy is in the quality of its mutation operator. In the +case of chrosomoses that encode a Cartesian Genetic Program (CGP), it makes sense to have mutation act +on active genes only (that is on that part of the chromosome that is actually expressed in the +final CGP / formula / model). This introduces a coupling between the optimization problem (say a symbolic +regression problem) and its solution strategy which, although not preventing, makes the use of general purpose +optimization algorithms inefficient (e.g. a generic evolutionary strategy would have a mutation operator which +is agnostic of the existence of active genes). + +In this class we provide an evolutionary strategy tailored to solve :class:`dcgpy.symbolic_regression` problems +leveraging the kowledge on the genetic structure of Cartesian Genetic Programs (i.e. able to mutate only active +genes). + +Args: + gen (``int``): number of generations. + mut_n (``int``): number of active genes to be mutated. + ftol (``int``): the algorithm will exit when the loss is below this tolerance. + learn_constants (``bool``): when true a gaussian mutation is applied to the ephemeral constants (std = 0.1). + seed (``int``): seed used by the internal random number generator (default is random). + +Raises: + unspecified: any exception thrown by failures at the intersection between C++ and Python (e.g., + type conversion errors, mismatched function signatures, etc.) + ValueError: if *mut_n* is 0 or *ftol* is negative. + + )"; +} + } // namespace dcgpy diff --git a/dcgpy/docstrings.hpp b/dcgpy/docstrings.hpp index e3dd55f7..9882d956 100644 --- a/dcgpy/docstrings.hpp +++ b/dcgpy/docstrings.hpp @@ -1,5 +1,5 @@ -#ifndef PYGMO_DOCSTRINGS_HPP -#define PYGMO_DOCSTRINGS_HPP +#ifndef DCGPY_DOCSTRINGS_HPP +#define DCGPY_DOCSTRINGS_HPP #include @@ -35,6 +35,43 @@ std::string expression_ann_set_output_f_doc(); std::string expression_ann_n_active_weights_doc(); std::string expression_ann_sgd_doc(); +// UDPs +std::string symbolic_regression_doc(); +std::string symbolic_regression_init_doc(); +// UDAs +std::string generic_uda_get_seed_doc(); +std::string es4cgp_doc(); +std::string es4cgp_get_log_doc(); + +// The symbolic Regressio Gym problems +// Classic +std::string generate_koza_quintic_doc(); +// From our paper +std::string generate_P1_doc(); +std::string generate_P2_doc(); +std::string generate_P3_doc(); +std::string generate_P4_doc(); +std::string generate_P5_doc(); +std::string generate_P6_doc(); +std::string generate_P7_doc(); +// From Vladi paper +std::string generate_kotanchek_doc(); +std::string generate_salutowicz_doc(); +std::string generate_salutowicz2d_doc(); +std::string generate_uball5d_doc(); +std::string generate_ratpol3d_doc(); +std::string generate_sinecosine_doc(); +std::string generate_ripple_doc(); +std::string generate_ratpol2d_doc(); +// NIST data +std::string generate_chwirut1_doc(); +std::string generate_chwirut2_doc(); +std::string generate_daniel_wood_doc(); +std::string generate_gauss1_doc(); +std::string generate_kirby2_doc(); +std::string generate_lanczos2_doc(); +std::string generate_misra1b_doc(); + } // namespace dcgpy #endif diff --git a/dcgpy/expose_expressions.cpp b/dcgpy/expose_expressions.cpp new file mode 100644 index 00000000..94c45bb1 --- /dev/null +++ b/dcgpy/expose_expressions.cpp @@ -0,0 +1,400 @@ +// See: https://docs.scipy.org/doc/numpy/reference/c-api.array.html#importing-the-api +// In every cpp file We need to make sure this is included before everything else, +// with the correct #defines. +#define NO_IMPORT_ARRAY +#define PY_ARRAY_UNIQUE_SYMBOL dcgpy_ARRAY_API +#include "numpy.hpp" + +#include +#include +#include +#include + +#include +#include +#include + +#include "common_utils.hpp" +#include "docstrings.hpp" + +using namespace dcgp; +using namespace dcgpy; +using namespace audi; +namespace bp = boost::python; + +namespace dcgpy +{ + +template +void expose_expression(std::string type) +{ + std::string class_name = "expression_" + type; + bp::class_>(class_name.c_str(), "A CGP expression", bp::no_init) + // Constructor with seed + .def("__init__", + bp::make_constructor( + +[](unsigned in, unsigned out, unsigned rows, unsigned cols, unsigned levelsback, + const bp::object &arity, const bp::object &kernels, unsigned n_eph, unsigned seed) { + auto kernels_v = l_to_v>(kernels); + bp::extract is_int(arity); + if (is_int.check()) { // arity is passed as an integer + unsigned ar = bp::extract(arity); + return ::new expression(in, out, rows, cols, levelsback, ar, kernels_v, n_eph, seed); + } else { // arity is passed as something else, a list is assumed + auto varity = l_to_v(arity); + return ::new expression(in, out, rows, cols, levelsback, varity, kernels_v, n_eph, seed); + } + }, + bp::default_call_policies(), + (bp::arg("inputs"), bp::arg("outputs"), bp::arg("rows"), bp::arg("cols"), bp::arg("levels_back"), + bp::arg("arity"), bp::arg("kernels"), bp::arg("n_eph"), bp::arg("seed"))), + expression_init_doc(type).c_str()) + // Constructor with no seed + .def("__init__", + bp::make_constructor( + +[](unsigned in, unsigned out, unsigned rows, unsigned cols, unsigned levelsback, + const bp::object &arity, const bp::object &kernels, unsigned n_eph) { + auto kernels_v = l_to_v>(kernels); + bp::extract is_int(arity); + if (is_int.check()) { // arity is passed as an integer + unsigned ar = bp::extract(arity); + return ::new expression(in, out, rows, cols, levelsback, ar, kernels_v, n_eph, + std::random_device()()); + } else { // arity is passed as something else, a list is assumed + auto varity = l_to_v(arity); + return ::new expression(in, out, rows, cols, levelsback, varity, kernels_v, n_eph, + std::random_device()()); + } + }, + bp::default_call_policies(), + (bp::arg("inputs"), bp::arg("outputs"), bp::arg("rows"), bp::arg("cols"), bp::arg("levels_back"), + bp::arg("arity"), bp::arg("kernels"), bp::arg("n_eph"))), + expression_init_doc(type).c_str()) + .def( + "__repr__", + +[](const expression &instance) -> std::string { + std::ostringstream oss; + oss << instance; + return oss.str(); + }) + .def( + "__call__", + +[](const expression &instance, const bp::object &in) { + try { + auto v = l_to_v(in); + return v_to_l(instance(v)); + } catch (...) { + PyErr_Clear(); + auto v = l_to_v(in); + return v_to_l(instance(v)); + } + }) + .def( + "set", +[](expression &instance, const bp::object &in) { instance.set(l_to_v(in)); }, + expression_set_doc().c_str(), bp::arg("chromosome")) + .def("set_f_gene", &expression::set_f_gene, expression_set_f_gene_doc().c_str(), + (bp::arg("node_id"), bp::arg("f_id"))) + .def( + "get", +[](const expression &instance) { return v_to_l(instance.get()); }, + "Gets the expression chromosome") + .def( + "get_lb", +[](const expression &instance) { return v_to_l(instance.get_lb()); }, + "Gets the lower bounds of the chromosome") + .def( + "get_ub", +[](const expression &instance) { return v_to_l(instance.get_ub()); }, + "Gets the upper bounds of the chromosome") + .def( + "get_active_genes", +[](const expression &instance) { return v_to_l(instance.get_active_genes()); }, + "Gets the idx of the active genes in the current chromosome (numbering is from 0)") + .def( + "get_active_nodes", +[](const expression &instance) { return v_to_l(instance.get_active_nodes()); }, + "Gets the idx of the active nodes in the current chromosome") + .def("get_n", &expression::get_n, "Gets the number of inputs of the dCGP expression") + .def("get_m", &expression::get_m, "Gets the number of outputs of the dCGP expression") + .def("get_rows", &expression::get_r, "Gets the number of rows of the dCGP expression") + .def("get_cols", &expression::get_c, "Gets the number of columns of the dCGP expression") + .def("get_levels_back", &expression::get_l, "Gets the number of levels-back allowed for the dCGP expression") + .def( + "get_arity", +[](const expression &instance) { return v_to_l(instance.get_arity()); }, + "get_arity()\nget_arity(node_id)\nGets the arity of the basis functions of the dCGP expression. Either " + "the whole vector or that of a single node.") + .def( + "get_arity", +[](const expression &instance, unsigned node_id) { return instance.get_arity(node_id); }, + (bp::arg("node_id"))) + .def( + "get_gene_idx", +[](const expression &instance) { return v_to_l(instance.get_gene_idx()); }, + "get_gene_idx()\nGets a vector containing the indexes in the chromosome where each node starts to be " + "expressed.") + .def( + "get_f", +[](const expression &instance) { return v_to_l(instance.get_f()); }, + "Gets the kernel functions") + .def( + "mutate", +[](expression &instance, const bp::object &in) { instance.mutate(l_to_v(in)); }, + expression_mutate_doc().c_str(), bp::arg("idxs")) + .def("mutate_random", &expression::mutate_random, + "mutate_random(N = 1)\nMutates N randomly selected genes within its allowed bounds", bp::arg("N")) + .def("mutate_active", &expression::mutate_active, + "mutate_active(N = 1)\nMutates N randomly selected active genes within their allowed bounds", + (bp::arg("N") = 1)) + .def("mutate_active_cgene", &expression::mutate_active_cgene, + "mutate_active_cgene(N = 1)\nMutates N randomly selected active connections within their allowed bounds", + (bp::arg("N") = 1)) + .def("mutate_ogene", &expression::mutate_ogene, + "mutate_ogene(N = 1)\nMutates N randomly selected output genes connection within their allowed bounds", + (bp::arg("N") = 1)) + .def( + "mutate_active_fgene", &expression::mutate_active_fgene, + "mutate_active_fgene(N = 1)\nMutates N randomly selected active function genes within their allowed bounds", + (bp::arg("N") = 1)) + // The parallelism for the loss computation is switched off in python as pitonic kernels can produce a crash + .def( + "loss", + +[](const expression &instance, const bp::object &points, const bp::object &labels, + const std::string &loss) { + auto parallel = 0u; + return instance.loss(to_vv(points), to_vv(labels), loss, parallel); + }, + expression_loss_doc().c_str(), (bp::arg("points"), bp::arg("labels"), bp::arg("loss"))) + .add_property( + "eph_val", +[](const expression &instance) { return v_to_l(instance.get_eph_val()); }, + +[](expression &instance, const bp::object &eph_val) { instance.set_eph_val(l_to_v(eph_val)); }) + .add_property( + "eph_symb", +[](const expression &instance) { return v_to_l(instance.get_eph_symb()); }, + +[](expression &instance, const bp::object &eph_symb) { + instance.set_eph_symb(l_to_v(eph_symb)); + }); +} + +template +void expose_expression_weighted(std::string type) +{ + std::string class_name = "expression_weighted_" + type; + bp::class_, bp::bases>>(class_name.c_str(), bp::no_init) + // Constructor with seed + .def("__init__", + bp::make_constructor( + +[](unsigned in, unsigned out, unsigned rows, unsigned cols, unsigned levelsback, + const bp::object &arity, const bp::object &kernels, unsigned seed) { + auto kernels_v = l_to_v>(kernels); + bp::extract is_int(arity); + if (is_int.check()) { // arity is passed as an integer + unsigned ar = bp::extract(arity); + return ::new expression_weighted(in, out, rows, cols, levelsback, ar, kernels_v, seed); + } else { // arity is passed as something else, a list is assumed + auto varity = l_to_v(arity); + return ::new expression_weighted(in, out, rows, cols, levelsback, varity, kernels_v, seed); + } + }, + bp::default_call_policies(), + (bp::arg("inputs"), bp::arg("outputs"), bp::arg("rows"), bp::arg("cols"), bp::arg("levels_back"), + bp::arg("arity"), bp::arg("kernels"), bp::arg("seed"))), + expression_init_doc(type).c_str()) + // Constructor with no seed + .def("__init__", + bp::make_constructor( + +[](unsigned in, unsigned out, unsigned rows, unsigned cols, unsigned levelsback, + const bp::object &arity, const bp::object &kernels) { + auto kernels_v = l_to_v>(kernels); + bp::extract is_int(arity); + if (is_int.check()) { // arity is passed as an integer + unsigned ar = bp::extract(arity); + return ::new expression_weighted(in, out, rows, cols, levelsback, ar, kernels_v, + std::random_device()()); + } else { // arity is passed as something else, a list is assumed + auto varity = l_to_v(arity); + return ::new expression_weighted(in, out, rows, cols, levelsback, varity, kernels_v, + std::random_device()()); + } + }, + bp::default_call_policies(), + (bp::arg("inputs"), bp::arg("outputs"), bp::arg("rows"), bp::arg("cols"), bp::arg("levels_back"), + bp::arg("arity"), bp::arg("kernels"))), + expression_init_doc(type).c_str()) + .def( + "__repr__", + +[](const expression_weighted &instance) -> std::string { + std::ostringstream oss; + oss << instance; + return oss.str(); + }) + .def( + "__call__", + +[](const expression_weighted &instance, const bp::object &in) { + try { + auto v = l_to_v(in); + return v_to_l(instance(v)); + } catch (...) { + PyErr_Clear(); + auto v = l_to_v(in); + return v_to_l(instance(v)); + } + }) + .def("set_weight", &expression_weighted::set_weight, expression_weighted_set_weight_doc().c_str(), + (bp::arg("node_id"), bp::arg("input_id"), bp::arg("weight"))) + .def( + "set_weights", + +[](expression_weighted &instance, const bp::object &weights) { + instance.set_weights(l_to_v(weights)); + }, + expression_weighted_set_weights_doc().c_str(), (bp::arg("weights"))) + .def("get_weight", &expression_weighted::get_weight, expression_weighted_get_weight_doc().c_str(), + (bp::arg("node_id"), bp::arg("input_id"))) + .def( + "get_weights", +[](expression_weighted &instance) { return v_to_l(instance.get_weights()); }, + "Gets all weights"); +} + +template +void expose_expression_ann(std::string type) +{ + std::string class_name = "expression_ann_" + type; + bp::class_>>(class_name.c_str(), bp::no_init) + // Constructor with seed + .def("__init__", + bp::make_constructor( + +[](unsigned in, unsigned out, unsigned rows, unsigned cols, unsigned levelsback, + const bp::object &arity, const bp::object &kernels, unsigned seed) { + auto kernels_v = l_to_v>(kernels); + bp::extract is_int(arity); + if (is_int.check()) { // arity is passed as an integer + unsigned ar = bp::extract(arity); + return ::new expression_ann(in, out, rows, cols, levelsback, ar, kernels_v, seed); + } else { // arity is passed as something else, a list is assumed + auto varity = l_to_v(arity); + return ::new expression_ann(in, out, rows, cols, levelsback, varity, kernels_v, seed); + } + }, + bp::default_call_policies(), + (bp::arg("inputs"), bp::arg("outputs"), bp::arg("rows"), bp::arg("cols"), bp::arg("levels_back"), + bp::arg("arity"), bp::arg("kernels"), bp::arg("seed"))), + expression_init_doc(type).c_str()) + // Constructor with no seed + .def("__init__", + bp::make_constructor( + +[](unsigned in, unsigned out, unsigned rows, unsigned cols, unsigned levelsback, + const bp::object &arity, const bp::object &kernels) { + auto kernels_v = l_to_v>(kernels); + bp::extract is_int(arity); + if (is_int.check()) { // arity is passed as an integer + unsigned ar = bp::extract(arity); + return ::new expression_ann(in, out, rows, cols, levelsback, ar, kernels_v, + std::random_device()()); + } else { // arity is passed as something else, a list is assumed + auto varity = l_to_v(arity); + return ::new expression_ann(in, out, rows, cols, levelsback, varity, kernels_v, + std::random_device()()); + } + }, + bp::default_call_policies(), + (bp::arg("inputs"), bp::arg("outputs"), bp::arg("rows"), bp::arg("cols"), bp::arg("levels_back"), + bp::arg("arity"), bp::arg("kernels"))), + expression_init_doc(type).c_str()) + .def( + "__repr__", + +[](const expression_ann &instance) -> std::string { + std::ostringstream oss; + oss << instance; + return oss.str(); + }) + .def( + "__call__", + +[](const expression_ann &instance, const bp::object &in) { + try { + auto v = l_to_v(in); + return v_to_l(instance(v)); + } catch (...) { + PyErr_Clear(); + auto v = l_to_v(in); + return v_to_l(instance(v)); + } + }) + .def("set_bias", &expression_ann::set_bias, expression_ann_set_bias_doc().c_str(), + (bp::arg("node_id"), bp::arg("bias"))) + .def( + "set_biases", + +[](expression_ann &instance, const bp::object &biases) { instance.set_biases(l_to_v(biases)); }, + expression_ann_set_biases_doc().c_str(), (bp::arg("biases"))) + .def("get_bias", &expression_ann::get_bias, expression_ann_get_bias_doc().c_str(), (bp::arg("node_id"))) + .def( + "get_biases", +[](expression_ann &instance) { return v_to_l(instance.get_biases()); }, "Gets all biases") + .def( + "set_weight", +[](expression_ann &instance, unsigned idx, double w) { instance.set_weight(idx, w); }, + (bp::arg("idx"), bp::arg("value"))) + .def( + "set_weight", + +[](expression_ann &instance, unsigned node_id, unsigned input_id, double w) { + instance.set_weight(node_id, input_id, w); + }, + expression_ann_set_weight_doc().c_str(), (bp::arg("node_id"), bp::arg("input_id"), bp::arg("value"))) + .def( + "set_weights", + +[](expression_ann &instance, const bp::object &weights) { instance.set_weights(l_to_v(weights)); }, + expression_weighted_set_weights_doc().c_str(), (bp::arg("weights"))) + .def("set_output_f", &expression_ann::set_output_f, expression_ann_set_output_f_doc().c_str(), + (bp::arg("f_id"))) + .def( + "get_weight", +[](expression_ann &instance, unsigned idx) { return instance.get_weight(idx); }, + (bp::arg("idx"))) + .def( + "get_weight", + +[](expression_ann &instance, unsigned node_id, unsigned input_id) { + return instance.get_weight(node_id, input_id); + }, + expression_ann_get_weight_doc().c_str(), (bp::arg("node_id"), bp::arg("input_id"))) + .def( + "get_weights", +[](expression_ann &instance) { return v_to_l(instance.get_weights()); }, "Gets all weights") + .def("n_active_weights", &expression_ann::n_active_weights, expression_ann_n_active_weights_doc().c_str(), + bp::arg("unique") = false) + .def( + "randomise_weights", + +[](expression_ann &instance, double mean, double std, unsigned seed) { + return instance.randomise_weights(mean, std, seed); + }, + expression_ann_randomise_weights_doc().c_str(), + (bp::arg("mean") = 0., bp::arg("std") = 0.1, bp::arg("seed"))) + .def( + "randomise_weights", + +[](expression_ann &instance, double mean, double std) { + return instance.randomise_weights(mean, std, std::random_device()()); + }, + (bp::arg("mean") = 0., bp::arg("std") = 0.1)) + .def( + "randomise_biases", + +[](expression_ann &instance, double mean, double std, unsigned seed) { + return instance.randomise_biases(mean, std, seed); + }, + expression_ann_randomise_biases_doc().c_str(), + (bp::arg("mean") = 0., bp::arg("std") = 0.1, bp::arg("seed"))) + .def( + "randomise_biases", + +[](expression_ann &instance, double mean, double std) { + return instance.randomise_biases(mean, std, std::random_device()()); + }, + (bp::arg("mean") = 0., bp::arg("std") = 0.1)) + .def( + "sgd", + +[](expression_ann &instance, const bp::object &points, const bp::object &labels, double l_rate, + unsigned batch_size, const std::string &loss, unsigned parallel, bool shuffle) { + auto d = to_vv(points); + auto l = to_vv(labels); + return instance.sgd(d, l, l_rate, batch_size, loss, parallel, shuffle); + }, + expression_ann_sgd_doc().c_str(), + (bp::arg("points"), bp::arg("labels"), bp::arg("lr"), bp::arg("batch_size"), bp::arg("loss"), + bp::arg("parallel") = 0u, bp::arg("shuffle") = true)); +} + +void expose_expressions() +{ + // double + expose_expression("double"); + expose_expression_weighted("double"); + expose_expression_ann("double"); + // gdual_d + expose_expression("gdual_double"); + expose_expression_weighted("gdual_double"); + // gdual_v + expose_expression("gdual_vdouble"); + expose_expression_weighted("gdual_vdouble"); +} +} // namespace dcgpy \ No newline at end of file diff --git a/dcgpy/expose_expressions.hpp b/dcgpy/expose_expressions.hpp new file mode 100644 index 00000000..2169f2d1 --- /dev/null +++ b/dcgpy/expose_expressions.hpp @@ -0,0 +1,9 @@ +#ifndef DCGPY_EXPOSE_EXPRESSIONS_HPP +#define DCGPY_EXPOSE_EXPRESSIONS_HPP + +namespace dcgpy +{ + void expose_expressions(); +} + +#endif \ No newline at end of file diff --git a/dcgpy/expose_kernels.cpp b/dcgpy/expose_kernels.cpp new file mode 100644 index 00000000..cff8a66f --- /dev/null +++ b/dcgpy/expose_kernels.cpp @@ -0,0 +1,119 @@ +// See: https://docs.scipy.org/doc/numpy/reference/c-api.array.html#importing-the-api +// In every cpp file We need to make sure this is included before everything else, +// with the correct #defines. +#define NO_IMPORT_ARRAY +#define PY_ARRAY_UNIQUE_SYMBOL dcgpy_ARRAY_API +#include "numpy.hpp" + +#include +#include +#include +#include + +#include +#include + +#include "common_utils.hpp" +#include "docstrings.hpp" + +using namespace dcgp; +using namespace dcgpy; +using namespace audi; +namespace bp = boost::python; + +namespace dcgpy +{ + +template +void expose_kernel(const std::string &type) +{ + std::string class_name = "kernel_" + type; + bp::class_>(class_name.c_str(), "The function defining the generic CGP node", bp::no_init) + .def("__init__", + bp::make_constructor( + +[](const bp::object &obj1, const bp::object &obj2, const std::string &name) { + std::function &)> my_function = [obj1](const std::vector &x) { + T in = bp::extract(obj1(v_to_l(x))); + return in; + }; + std::function &)> my_print_function + = [obj2](const std::vector &x) { + std::string in = bp::extract(obj2(v_to_l(x))); + return in; + }; + return ::new kernel(my_function, my_print_function, name); + }, + bp::default_call_policies(), (bp::arg("callable_f"), bp::arg("callable_s"), bp::arg("name"))), + kernel_init_doc(type).c_str()) + .def( + "__call__", + +[](kernel &instance, const bp::object &in) { + try { + auto v = l_to_v(in); + return bp::object(instance(v)); + } catch (...) { + PyErr_Clear(); + auto v = l_to_v(in); + return bp::object(instance(v)); + } + }) + .def( + "__repr__", +[](const kernel &instance) -> std::string { + std::ostringstream oss; + oss << instance; + return oss.str(); + }); + ; +} + +template +kernel wrap_operator(const kernel_set &ks, typename std::vector>::size_type idx) +{ + return ks[idx]; +} + +template +void expose_kernel_set(std::string type) +{ + std::string class_name = "kernel_set_" + type; + bp::class_>(class_name.c_str(), + "Helper to construct a set of kernel functions from their common name", bp::no_init) + .def("__init__", + bp::make_constructor( + +[](const bp::object &obj1) { + auto a = l_to_v(obj1); + return ::new kernel_set(a); + }, + bp::default_call_policies(), (bp::arg("kernels"))), + kernel_set_init_doc(type).c_str()) + .def( + "__call__", +[](kernel_set &instance) { return v_to_l(instance()); }) + .def( + "__repr__", + +[](const kernel_set &instance) -> std::string { + std::ostringstream oss; + oss << instance; + return oss.str(); + }) + .def("push_back", (void (kernel_set::*)(std::string)) & kernel_set::push_back, + kernel_set_push_back_str_doc().c_str(), bp::arg("kernel_name")) + .def("push_back", (void (kernel_set::*)(const kernel &)) & kernel_set::push_back, + kernel_set_push_back_ker_doc(type).c_str(), bp::arg("kernel")) + .def("__getitem__", &wrap_operator); +} + +void expose_kernels() +{ + // double + expose_kernel("double"); + expose_kernel_set("double"); + + // gdual_d + expose_kernel("gdual_double"); + expose_kernel_set("gdual_double"); + + // gdual_v + expose_kernel("gdual_vdouble"); + expose_kernel_set("gdual_vdouble"); +} +} // namespace dcgpy \ No newline at end of file diff --git a/dcgpy/expose_kernels.hpp b/dcgpy/expose_kernels.hpp new file mode 100644 index 00000000..ee1a79b5 --- /dev/null +++ b/dcgpy/expose_kernels.hpp @@ -0,0 +1,9 @@ +#ifndef DCGPY_EXPOSE_KERNELS_HPP +#define DCGPY_EXPOSE_KERNELS_HPP + +namespace dcgpy +{ + void expose_kernels(); +} + +#endif \ No newline at end of file diff --git a/dcgpy/expose_symbolic_regression.cpp b/dcgpy/expose_symbolic_regression.cpp new file mode 100644 index 00000000..9ca39e1a --- /dev/null +++ b/dcgpy/expose_symbolic_regression.cpp @@ -0,0 +1,110 @@ +// See: https://docs.scipy.org/doc/numpy/reference/c-api.array.html#importing-the-api +// In every cpp file We need to make sure this is included before everything else, +// with the correct #defines. +#define NO_IMPORT_ARRAY +#define PY_ARRAY_UNIQUE_SYMBOL dcgpy_ARRAY_API +#include "numpy.hpp" + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "common_utils.hpp" +#include "docstrings.hpp" + +namespace bp = boost::python; +namespace pg = pygmo; +using namespace dcgp; + +using gym_ptr = void (*)(std::vector> &, std::vector> &); +template +inline void expose_data_from_the_gym(const std::string &name, const std::string &docstring) +{ + bp::def( + name.c_str(), + +[]() { + std::vector> points, labels; + F(points, labels); + return bp::make_tuple(dcgpy::vvector_to_ndarr(points), dcgpy::vvector_to_ndarr(labels)); + }, + docstring.c_str()); +} + +namespace dcgpy +{ + +void expose_symbolic_regression() +{ + // We expose the UDPs + pg::expose_problem("symbolic_regression", symbolic_regression_doc().c_str()) + .def("__init__", + bp::make_constructor( + +[](const bp::object &points, const bp::object &labels, unsigned rows, unsigned cols, + unsigned levels_back, unsigned arity, const bp::object &kernels, unsigned n_eph, + bool multi_objective, unsigned parallel_batches) { + auto kernels_v = l_to_v>(kernels); + auto vvd_points = to_vv(points); + auto vvd_labels = to_vv(labels); + return ::new dcgp::symbolic_regression(vvd_points, vvd_labels, rows, cols, levels_back, arity, + kernels_v, n_eph, multi_objective, parallel_batches); + }, + bp::default_call_policies(), + (bp::arg("points"), bp::arg("labels"), bp::arg("rows"), bp::arg("cols"), bp::arg("levels_back"), + bp::arg("arity"), bp::arg("kernels"), bp::arg("n_eph"), bp::arg("multi_objective"), + bp::arg("parallel_batches") = 0u)), + symbolic_regression_init_doc().c_str()) + .def( + "pretty", +[](const dcgp::symbolic_regression &instance, + const bp::object &x) { return instance.pretty(to_v(x)); }) + .def( + "prettier", +[](const dcgp::symbolic_regression &instance, const bp::object &x) { + return instance.prettier(to_v(x)); + }); + // We expose the UDAs + // ES-4CGP (Evolutionary Strategy for Caertesian Genetic Programming) + auto es4cgp_ = pg::expose_algorithm("es4cgp", es4cgp_doc().c_str()); + es4cgp_.def(bp::init( + (bp::arg("gen") = 1u, bp::arg("mut_n") = 1u, bp::arg("ftol") = 1e-4, bp::arg("learn_constants") = true))); + es4cgp_.def(bp::init( + (bp::arg("gen") = 1u, bp::arg("mut_n") = 1u, bp::arg("ftol") = 1e-4, bp::arg("learn_constants") = true, + bp::arg("seed")))); + es4cgp_.def("get_seed", &es4cgp::get_seed, generic_uda_get_seed_doc().c_str()); + pg::expose_algo_log(es4cgp_, es4cgp_get_log_doc().c_str()); + + // Making data from the gym available in python + expose_data_from_the_gym<&gym::generate_koza_quintic>("generate_koza_quintic", generate_koza_quintic_doc()); + // From Our paper + expose_data_from_the_gym<&gym::generate_P1>("generate_P1", generate_P1_doc()); + expose_data_from_the_gym<&gym::generate_P2>("generate_P2", generate_P2_doc()); + expose_data_from_the_gym<&gym::generate_P3>("generate_P3", generate_P3_doc()); + expose_data_from_the_gym<&gym::generate_P4>("generate_P4", generate_P4_doc()); + expose_data_from_the_gym<&gym::generate_P5>("generate_P5", generate_P5_doc()); + expose_data_from_the_gym<&gym::generate_P6>("generate_P6", generate_P6_doc()); + expose_data_from_the_gym<&gym::generate_P7>("generate_P7", generate_P7_doc()); + // From Vladi paper + expose_data_from_the_gym<&gym::generate_kotanchek>("generate_kotanchek", generate_kotanchek_doc()); + expose_data_from_the_gym<&gym::generate_salutowicz>("generate_salutowicz", generate_salutowicz_doc()); + expose_data_from_the_gym<&gym::generate_salutowicz2d>("generate_salutowicz2d", generate_salutowicz2d_doc()); + expose_data_from_the_gym<&gym::generate_uball5d>("generate_uball5d", generate_uball5d_doc()); + expose_data_from_the_gym<&gym::generate_ratpol3d>("generate_ratpol3d", generate_ratpol3d_doc()); + expose_data_from_the_gym<&gym::generate_sinecosine>("generate_sinecosine", generate_sinecosine_doc()); + expose_data_from_the_gym<&gym::generate_ripple>("generate_ripple", generate_ripple_doc()); + expose_data_from_the_gym<&gym::generate_ratpol2d>("generate_ratpol2d", generate_ratpol2d_doc()); + // NIST data + expose_data_from_the_gym<&gym::generate_chwirut1>("generate_chwirut1", generate_chwirut1_doc()); + expose_data_from_the_gym<&gym::generate_chwirut2>("generate_chwirut2", generate_chwirut2_doc()); + expose_data_from_the_gym<&gym::generate_daniel_wood>("generate_daniel_wood", generate_daniel_wood_doc()); + expose_data_from_the_gym<&gym::generate_gauss1>("generate_gauss1", generate_gauss1_doc()); + expose_data_from_the_gym<&gym::generate_kirby2>("generate_kirby2", generate_kirby2_doc()); + expose_data_from_the_gym<&gym::generate_lanczos2>("generate_lanczos2", generate_lanczos2_doc()); + expose_data_from_the_gym<&gym::generate_misra1b>("generate_misra1b", generate_misra1b_doc()); +} +} // namespace dcgpy \ No newline at end of file diff --git a/dcgpy/expose_symbolic_regression.hpp b/dcgpy/expose_symbolic_regression.hpp new file mode 100644 index 00000000..3b972334 --- /dev/null +++ b/dcgpy/expose_symbolic_regression.hpp @@ -0,0 +1,9 @@ +#ifndef DCGPY_EXPOSE_SYMBOLIC_REGRESSION_HPP +#define DCGPY_EXPOSE_SYMBOLIC_REGRESSION_HPP + +namespace dcgpy +{ + void expose_symbolic_regression(); +} + +#endif \ No newline at end of file diff --git a/dcgpy/test.py b/dcgpy/test.py index 755e5624..7410e6d2 100644 --- a/dcgpy/test.py +++ b/dcgpy/test.py @@ -2,7 +2,12 @@ import unittest as _ut + class test_kernel(_ut.TestCase): + def runTest(self): + self.test_double() + self.test_gdual_double() + self.test_gdual_vdouble() def my_sum(self, x): return sum(x) @@ -48,9 +53,9 @@ def test_gdual_vdouble(self): class test_kernel_set(_ut.TestCase): def runTest(self): - self.test_double() - self.test_gdual_double() - self.test_gdual_vdouble() + self.test_double() + self.test_gdual_double() + self.test_gdual_vdouble() def my_sum(self, x): return sum(x) @@ -109,28 +114,38 @@ def test_gdual_vdouble(self): class test_expression(_ut.TestCase): - def runTest(self): - self.test_double() - self.test_gdual_double() - self.test_gdual_vdouble() - self.test_loss_double() - self.test_loss_gdual_double() - self.test_loss_gdual_vdouble() + self.test_double() + self.test_gdual_double() + self.test_gdual_vdouble() + self.test_loss_double() + self.test_loss_gdual_double() + self.test_loss_gdual_vdouble() def test_double(self): from dcgpy import expression_double as expression from dcgpy import kernel_set_double as kernel_set # Construction - ex = expression(1, 1, 1, 6, 6, 2, kernel_set( - ["sum", "mul", "div", "diff"])(), 0, 33) - self.assertEqual(ex([1.]), [0.5]) - self.assertEqual(ex([2.]), [1.]) - self.assertEqual(ex([-1.]), [-0.5]) - self.assertEqual(ex([-2.]), [-1.]) - ex = expression(1, 1, 1, 6, 6, 2, kernel_set( - ["sum", "mul", "div", "diff"])(), 2, 33) + ex = expression(inputs=1, + outputs=1, + rows=1, + cols=6, + levels_back=6, + arity=2, + kernels=kernel_set(["sum", "mul", "div", "diff"])(), + n_eph=0, + seed=33) + + ex = expression(inputs=1, + outputs=1, + rows=1, + cols=6, + levels_back=6, + arity=2, + kernels=kernel_set(["sum", "mul", "div", "diff"])(), + n_eph=2, + seed=33) # Ephemeral value attributes tests self.assertEqual(ex.eph_val, [1, 2]) self.assertEqual(ex.eph_symb, ["c1", "c2"]) @@ -144,30 +159,45 @@ def test_gdual_double(self): from dcgpy import kernel_set_gdual_double as kernel_set from pyaudi import gdual_double as gdual - ex = expression(1, 1, 1, 6, 6, 2, kernel_set( - ["sum", "mul", "div", "diff"])(), 0, 20) - self.assertEqual(ex([gdual(1, "x", 2)]), [gdual(0.)]) - self.assertEqual(ex([gdual(2, "x", 2)]), [gdual(0.)]) - self.assertEqual(ex([gdual(-1, "x", 2)]), [gdual(0.)]) - self.assertEqual(ex([gdual(-2, "x", 2)]), [gdual(0.)]) + expression(inputs=1, + outputs=1, + rows=1, + cols=6, + levels_back=6, + arity=2, + kernels=kernel_set(["sum", "mul", "div", "diff"])(), + n_eph=0, + seed=20) def test_gdual_vdouble(self): from dcgpy import expression_gdual_vdouble as expression from dcgpy import kernel_set_gdual_vdouble as kernel_set from pyaudi import gdual_vdouble as gdual - ex = expression(1, 1, 1, 6, 6, 2, kernel_set( - ["sum", "mul", "div", "diff"])(), 0, 20) - self.assertEqual(ex([gdual([1, 2, -1, 2], "x", 2)]), - [gdual([0, 0, 0, 0])]) + expression(inputs=1, + outputs=1, + rows=1, + cols=6, + levels_back=6, + arity=2, + kernels=kernel_set(["sum", "mul", "div", "diff"])(), + n_eph=0, + seed=20) def test_loss_double(self): from dcgpy import expression_double as expression from dcgpy import kernel_set_double as kernel_set import numpy as np - ex = expression(1, 1, 1, 6, 6, 2, kernel_set( - ["sum", "mul", "div", "diff"])(), 0, 33) + ex = expression(inputs=1, + outputs=1, + rows=1, + cols=6, + levels_back=6, + arity=2, + kernels=kernel_set(["sum", "mul", "div", "diff"])(), + n_eph=0, + seed=33) x = 1. loss_list = ex.loss([[x]], [ex([x])], "MSE") loss_array = ex.loss(np.array([[x]]), np.array([ex([x])]), "MSE") @@ -179,28 +209,74 @@ def test_loss_gdual_double(self): from pyaudi import gdual_double as gdual import numpy as np - ex = expression(1, 1, 1, 6, 6, 2, kernel_set( - ["sum", "mul", "div", "diff"])(), 0, 33) + ex = expression(inputs=1, + outputs=1, + rows=1, + cols=6, + levels_back=6, + arity=2, + kernels=kernel_set(["sum", "mul", "div", "diff"])(), + n_eph=0, + seed=33) x = gdual(1., "x", 3) loss_list = ex.loss([[x]], [ex([x])], "MSE") loss_array = ex.loss(np.array([[x]]), np.array([ex([x])]), "MSE") self.assertEqual(loss_list, loss_array) - def test_loss_gdual_vdouble(self): from dcgpy import expression_gdual_vdouble as expression from dcgpy import kernel_set_gdual_vdouble as kernel_set from pyaudi import gdual_vdouble as gdual import numpy as np - ex = expression(1, 1, 1, 6, 6, 2, kernel_set( - ["sum", "mul", "div", "diff"])(), 0, 33) + ex = expression(inputs=1, + outputs=1, + rows=1, + cols=6, + levels_back=6, + arity=2, + kernels=kernel_set(["sum", "mul", "div", "diff"])(), + n_eph=0, + seed=33) x = gdual([1., 2.], "x", 3) loss_list = ex.loss([[x]], [ex([x])], "MSE") loss_array = ex.loss(np.array([[x]]), np.array([ex([x])]), "MSE") self.assertEqual(loss_list, loss_array) +class test_symbolic_regression(_ut.TestCase): + def runTest(self): + from dcgpy import symbolic_regression, generate_koza_quintic, kernel_set_double + import pygmo as pg + X, Y = generate_koza_quintic() + udp = symbolic_regression( + points=X, + labels=Y, + rows=1, + cols=20, + levels_back=21, + arity=2, + kernels=kernel_set_double(["sum", "diff"])(), + n_eph=2, + multi_objective=False, + parallel_batches=0) + prob = pg.problem(udp) + pop = pg.population(prob, 10) + udp.pretty(pop.champion_x) + udp.prettier(pop.champion_x) + # Unconstrained + self.assertEqual(prob.get_nc(), 0) + self.assertEqual(prob.get_nic(), 0) + # Single objective + self.assertEqual(prob.get_nobj(), 1) + # Dimensions + self.assertEqual(prob.get_nix(), 20 * (2 + 1) + 1) + self.assertEqual(prob.get_nx(), 2 + prob.get_nix()) + # Has gradient and hessians + self.assertEqual(prob.has_gradient(), True) + self.assertEqual(prob.has_hessians(), True) + + def run_test_suite(): """Run the full test suite. This function will raise an exception if at least one test fails. @@ -209,6 +285,7 @@ def run_test_suite(): suite = _ut.TestLoader().loadTestsFromTestCase(test_kernel) suite.addTest(test_kernel_set()) suite.addTest(test_expression()) + suite.addTest(test_symbolic_regression()) test_result = _ut.TextTestRunner(verbosity=2).run(suite) if len(test_result.failures) > 0 or len(test_result.errors) > 0: diff --git a/doc/doxygen/Doxyfile.in b/doc/doxygen/Doxyfile.in index 276f32d6..d427db45 100644 --- a/doc/doxygen/Doxyfile.in +++ b/doc/doxygen/Doxyfile.in @@ -796,7 +796,7 @@ FILE_PATTERNS = *cpp *.hpp # be searched for input files as well. # The default value is: NO. -RECURSIVE = NO +RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should be # excluded from the INPUT source files. This way you can easily exclude a @@ -858,7 +858,7 @@ EXAMPLE_RECURSIVE = NO # that contain images that are to be included in the documentation (see the # \image command). -IMAGE_PATH = +IMAGE_PATH = ../sphinx/_static # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program diff --git a/doc/sphinx/_static/EvolutionaryStrategy.jpg b/doc/sphinx/_static/EvolutionaryStrategy.jpg new file mode 100644 index 00000000..6278ecab Binary files /dev/null and b/doc/sphinx/_static/EvolutionaryStrategy.jpg differ diff --git a/doc/sphinx/_static/cgp.jpg b/doc/sphinx/_static/cgp.jpg new file mode 100644 index 00000000..92ade150 Binary files /dev/null and b/doc/sphinx/_static/cgp.jpg differ diff --git a/doc/sphinx/_static/kernels.png b/doc/sphinx/_static/kernels.png new file mode 100644 index 00000000..90f67eec Binary files /dev/null and b/doc/sphinx/_static/kernels.png differ diff --git a/doc/sphinx/_static/non_linear_regression.png b/doc/sphinx/_static/non_linear_regression.png new file mode 100644 index 00000000..abaefd5a Binary files /dev/null and b/doc/sphinx/_static/non_linear_regression.png differ diff --git a/doc/sphinx/conf.py.in b/doc/sphinx/conf.py.in index 0096fe24..6017da98 100644 --- a/doc/sphinx/conf.py.in +++ b/doc/sphinx/conf.py.in @@ -34,12 +34,16 @@ import sphinx_bootstrap_theme extensions = [ 'sphinx.ext.mathjax', 'sphinx.ext.autodoc', + 'sphinx.ext.intersphinx', 'breathe', 'sphinxcontrib.napoleon', 'IPython.sphinxext.ipython_console_highlighting', - 'nbsphinx', + 'nbsphinx' ] +intersphinx_mapping = {'pagmo': ('https://esa.github.io/pagmo2/', None), + 'audi': ('http://darioizzo.github.io/audi/', None)} + autoclass_content = 'both' # BREATHE configuration paths diff --git a/doc/sphinx/docs/cpp/es4cgp.rst b/doc/sphinx/docs/cpp/es4cgp.rst new file mode 100644 index 00000000..41c8c3c1 --- /dev/null +++ b/doc/sphinx/docs/cpp/es4cgp.rst @@ -0,0 +1,12 @@ +Evolutionary Strategy (UDA) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. figure:: ../../_static/EvolutionaryStrategy.jpg + :alt: weighted dCGP expression + + +.. highlight:: c++ + +.. doxygenclass:: dcgp::symbolic_regression + :project: dCGP + :members: \ No newline at end of file diff --git a/doc/sphinx/docs/expression.rst b/doc/sphinx/docs/cpp/expression.rst similarity index 89% rename from doc/sphinx/docs/expression.rst rename to doc/sphinx/docs/cpp/expression.rst index 517f09b7..5eed9c33 100644 --- a/doc/sphinx/docs/expression.rst +++ b/doc/sphinx/docs/cpp/expression.rst @@ -1,4 +1,4 @@ -dcgp::expression, The standard Cartesian Genetic Program (dCGP) +expression (dCGP) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ This class represents a **Cartesian Genetic Program**. Since that is, essentially, an artificial genetic encoding for a mathematical expression, we named the templated class *expression*. @@ -6,7 +6,7 @@ The class template can be instantiated using the types *double* or *gdual*. I the class would operate in the differential algebra of truncated Taylor polynomials with coefficients in *T*, and thus provide also any order derivative information on the program (i.e. the Taylor expansion of the program output with respect to its inputs). -.. figure:: ../_static/expression.png +.. figure:: ../../_static/expression.png :alt: dCGP expression :align: center diff --git a/doc/sphinx/docs/expression_ann.rst b/doc/sphinx/docs/cpp/expression_ann.rst similarity index 88% rename from doc/sphinx/docs/expression_ann.rst rename to doc/sphinx/docs/cpp/expression_ann.rst index 482cbb0c..6d0b29ad 100644 --- a/doc/sphinx/docs/expression_ann.rst +++ b/doc/sphinx/docs/cpp/expression_ann.rst @@ -1,4 +1,4 @@ -dcgp::expression_ann, An artificial neural network Cartesian Genetic Program (dCGP-ANN) +expression_ann (dCGP-ANN) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ This class represents a **Artificial Neural Network Cartesian Genetic Program**. Each node connection is associated to a weight and each node to a bias. Only a subset of the kernel functions @@ -6,7 +6,7 @@ is allowed, including the most used nonlinearities in ANN research: *tanh*, *sig less obvious architectures. Weights and biases of the expression can be trained using the efficient backpropagation algorithm (gduals are not allowed for this class, they correspond to forward mode automated differentiation which is super inefficient for deep networks ML.) -.. figure:: ../_static/expression_ann.png +.. figure:: ../../_static/expression_ann.png :alt: weighted dCGP expression :align: center diff --git a/doc/sphinx/docs/expression_weighted.rst b/doc/sphinx/docs/cpp/expression_weighted.rst similarity index 78% rename from doc/sphinx/docs/expression_weighted.rst rename to doc/sphinx/docs/cpp/expression_weighted.rst index 149a3311..a06378ca 100644 --- a/doc/sphinx/docs/expression_weighted.rst +++ b/doc/sphinx/docs/cpp/expression_weighted.rst @@ -1,5 +1,5 @@ -dcgp::expression_weighted, A weighted Cartesian Genetic Program (dCGP-W) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +expression_weighted (dCGP-W) +-------------------------------- This class represents a **Weighted Cartesian Genetic Program**. Each node connection is associated to a weight so that more generic mathematical expressions can be represented. When instantiated with the type *gdual*, also the weights are defined as gduals, hence the program output can be expanded also with respect to the weights @@ -8,7 +8,7 @@ thus allowing to train the weights using algorithms such as stochastic gradient The class template can be instantiated using the types *double* or *gdual*. -.. figure:: ../_static/expression_weighted.png +.. figure:: ../../_static/expression_weighted.png :alt: weighted dCGP expression :align: center diff --git a/doc/sphinx/docs/cpp/index.rst b/doc/sphinx/docs/cpp/index.rst new file mode 100644 index 00000000..564df607 --- /dev/null +++ b/doc/sphinx/docs/cpp/index.rst @@ -0,0 +1,98 @@ +.. cpp docs + +C++ Documentation +================= + +.. contents:: + +Kernels +--------- + +.. figure:: ../../_static/kernels.png + :alt: dCGP kernels + :align: right + :scale: 40 % + +**Kernels**, (also called **non-linearities** in the ANN literature) describe the fundamental computational units of a CGP. +Things like addition, multiplication, trigonomoetric functions are all kernels. The templated class :cpp:class:`dcgp::kernel` allow +the user the definition of their own kernels able to operate on the choosen type. + +The most popular kernels are already coded and shipped with dcgpy. A python list containing multiple kernels can be easily +instantiated via the :cpp:class:`dcgp::kernel_set`. + +.. toctree:: + :maxdepth: 1 + + kernel + kernel_set + kernel_list + +---------------------------------------------------------------------------------- + +Types of dCGPs +-------------- + +Several types of **Cartesian Genetic Program** are provided in dcgpy. Since a dCGP is some kind of a mathematical expression, +we use the term expression to name the related, different, classes. + +We essentially provide three types of CGPs: + +* **expression**: this is the original CGP as introduced by Miller in 1999. +* **expression_weighted**: this adds to the original CGP formulation weights on each of the graph edges. (original with dCGP - 2016) +* **expression_ann**: this represents an Artificial Neural Network inclusive of biases and weights, via a CGP and allows to learn the model parameters using backproagation. (original with dCGP - 2018) + +Each of the above CGPs can operate over different numerical types, hence the corresponding classes are templated. +For example a :cpp:class:`dcgp::expression` can operate over doubles (``T`` = ``double``), in which case the +result of evaluating the inner computational graph is a ``double``, but also on a ``gdual`` (``T`` = :cpp:class:`audi::gdual ` ````) +with ``Cf`` = ``double``, in which case, the result of evaluating the inner computational graph will +be a :cpp:class:`audi::gdual ` ```` and hence it will contain all the program derivatives +up to the chosen order and is thus referred to as a dCGP. + +Another important type some CGPs can operate upon is the :cpp:class:`audi::gdual ` ```` with ``Cf`` = ``vectorized_double``. +This type offers order of magnitude speed ups whenever a CGP needs derivatives and to be evaluated over several points +(such as in the case of a loss evaluation). + +.. toctree:: + :maxdepth: 1 + + expression + expression_weighted + expression_ann + +---------------------------------------------------------------------------------- + + +Symbolic Regression +--------------------- + +.. figure:: ../../_static/non_linear_regression.png + :alt: non-linear regression + :align: right + :scale: 70 % + +Mathematically, a symbolic regression problem is a global optimization problem. In order to facilitate its solution, +a number of classes have been designed to interface a :cpp:class:`dcgp::expression` to the optimisation suite pygmo. +In particular we provide UDPs (in pagmo's jargon user defined problems) that can be used to build +:cpp:class:`pagmo::problem ` objects (representing symbolic regression problems) and UDAs +(in pagmo's jargon user defined algorithms) that can be used to build :cpp:class:`pagmo::algorithm ` objects. + +.. toctree:: + :maxdepth: 1 + + symbolic_regression + es4cgp + +We also make available, as a gym to test the capabilities of various proposed methodologies, a number of data sets +coming from different scientific sources. These are collected in what we call the ``dcgpy gym``. + +.. toctree:: + :maxdepth: 1 + + koza_quintic + p_problems + vladislavleva_problems + nist_problems + + + + \ No newline at end of file diff --git a/doc/sphinx/docs/kernel.rst b/doc/sphinx/docs/cpp/kernel.rst similarity index 69% rename from doc/sphinx/docs/kernel.rst rename to doc/sphinx/docs/cpp/kernel.rst index d565bd54..a02ca96a 100644 --- a/doc/sphinx/docs/kernel.rst +++ b/doc/sphinx/docs/cpp/kernel.rst @@ -1,6 +1,7 @@ -dcgp::kernel, a function defining the generic dCGP node +kernel ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - +.. highlight:: c++ + .. doxygenclass:: dcgp::kernel :project: dCGP :members: \ No newline at end of file diff --git a/doc/sphinx/docs/kernel_set.rst b/doc/sphinx/docs/cpp/kernel_list.rst similarity index 83% rename from doc/sphinx/docs/kernel_set.rst rename to doc/sphinx/docs/cpp/kernel_list.rst index f3b26c4c..40dc48a6 100644 --- a/doc/sphinx/docs/kernel_set.rst +++ b/doc/sphinx/docs/cpp/kernel_list.rst @@ -1,7 +1,10 @@ -dcgp::kernel_set: a set of kernels -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Available kernels +---------------------------------- -.. _kernels: +When constructing a :cpp:class:`dcgp::kernel_set` we can use the following names to add the corresponding +kernels to the set. + +--------------------------------------------------------------------------- .. cssclass:: table-bordered table-striped @@ -22,7 +25,7 @@ dcgp::kernel_set: a set of kernels +----------------+-----------------------+ |"cos" |cosine | +----------------+-----------------------+ - |"log" |logarithm | + |"log" | natural logarithm | +----------------+-----------------------+ |"exp" |exponential | +----------------+-----------------------+ @@ -30,7 +33,7 @@ dcgp::kernel_set: a set of kernels +----------------+-----------------------+ |"sqrt" |square root | +----------------+-----------------------+ - | **Suitable also for dCGPANN** | + | **Suitable for dCGPANN** | +----------------+-----------------------+ |"sig" |sigmoid | +----------------+-----------------------+ @@ -44,8 +47,3 @@ dcgp::kernel_set: a set of kernels +----------------+-----------------------+ |"sum" |addition | +----------------+-----------------------+ - - -.. doxygenclass:: dcgp::kernel_set - :project: dCGP - :members: diff --git a/doc/sphinx/docs/cpp/kernel_set.rst b/doc/sphinx/docs/cpp/kernel_set.rst new file mode 100644 index 00000000..3cfba2b4 --- /dev/null +++ b/doc/sphinx/docs/cpp/kernel_set.rst @@ -0,0 +1,29 @@ +kernel_set +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Classes such as :cpp:class:`dcgp::expression`, :cpp:class:`dcgp::symbolic_regression` and others are constructed +from an ``std::vector`` of :cpp:class:`dcgp::kernel`. Assembling such a ``std::vector`` is an operation that is greatly +facilitated by the class :cpp:class:`dcgp::kernel_set`. + +Intended use of the class is: + +.. highlight:: c++ + +.. code-block:: c++ + + // (optional) - Say we have a custom kernel named f + kernel f(my_sum, print_my_sum, "my_sum"); + // We can construct a kernel set (and fill it in with provided kernels) + kernel_set kernels({"sum", "div", "mul","diff"}); + // We can get a vector with these four basic kernels ... + auto kernel_vector = kernels(); + // (optional) - ... or add our own custom kernel to the set ... + basic_set.push_back(f); + // (optional) - ... and get a vector with all five kernels + auto kernel_vector2 = kernels(); + +--------------------------------------------------------------------------- + +.. doxygenclass:: dcgp::kernel_set + :project: dCGP + :members: diff --git a/doc/sphinx/docs/cpp/symbolic_regression.rst b/doc/sphinx/docs/cpp/symbolic_regression.rst new file mode 100644 index 00000000..b2793dca --- /dev/null +++ b/doc/sphinx/docs/cpp/symbolic_regression.rst @@ -0,0 +1,8 @@ +Symbolic Regression (UDP) +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. highlight:: c++ + +.. doxygenclass:: dcgp::symbolic_regression + :project: dCGP + :members: \ No newline at end of file diff --git a/doc/sphinx/docs/cpp_docs.rst b/doc/sphinx/docs/cpp_docs.rst deleted file mode 100644 index 6eae7f5f..00000000 --- a/doc/sphinx/docs/cpp_docs.rst +++ /dev/null @@ -1,25 +0,0 @@ -.. cpp docs - -C++ Documentation -================= - -Types of dCGPs --------------------- - -.. toctree:: - :maxdepth: 1 - - expression - expression_weighted - expression_ann - - -Non linearities --------------------- - -.. toctree:: - :maxdepth: 1 - - kernel - kernel_set - \ No newline at end of file diff --git a/doc/sphinx/docs/index.rst b/doc/sphinx/docs/index.rst index 72651ac6..df78c37d 100644 --- a/doc/sphinx/docs/index.rst +++ b/doc/sphinx/docs/index.rst @@ -3,19 +3,16 @@ Documentation ============= -The documentation is split into two parts. The C++ documentation and the Python documentation. We try to keep the APIs as similar as possible, but since temmplates are not available in python, we expose -an arbitrary number of template instantiations indicating in the class name, after an underscore, the type. For example, the class *expression_double* corresponds, in Python, to the C++ class *expression*. +The documentation is split into two parts. The C++ documentation and the Python documentation. +We try to keep the APIs as similar as possible, but since templates are not available in python, +we expose an arbitrary number of template instantiations indicating in the class name +after an underscore, the type. For example, the Python class *expression_double* corresponds, +to the C++ class *expression*. ------------------------------------------------- .. toctree:: - :maxdepth: 3 + :maxdepth: 1 - cpp_docs - ------------------------------------------------- - -.. toctree:: - :maxdepth: 3 - - python_docs + cpp/index + python/index diff --git a/doc/sphinx/docs/python/es4cgp.rst b/doc/sphinx/docs/python/es4cgp.rst new file mode 100644 index 00000000..7788bdf4 --- /dev/null +++ b/doc/sphinx/docs/python/es4cgp.rst @@ -0,0 +1,7 @@ +Evolutionary Strategy (UDA) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +.. figure:: ../../_static/EvolutionaryStrategy.jpg + :alt: weighted dCGP expression + +.. autoclass:: dcgpy.es4cgp + :members: \ No newline at end of file diff --git a/doc/sphinx/docs/python/expression.rst b/doc/sphinx/docs/python/expression.rst new file mode 100644 index 00000000..0c999e6a --- /dev/null +++ b/doc/sphinx/docs/python/expression.rst @@ -0,0 +1,35 @@ +expression (dCGP) +----------------- + +.. figure:: ../../_static/expression.png + :alt: dCGP expression + :align: center + +Three types of expression are currently available in python. +They differ from the type they operate upon: double, gdual, vectorized gdual. + +.. contents:: + +--------------------------------------------------------------- + +expression_double +^^^^^^^^^^^^^^^^^ + +.. autoclass:: dcgpy.expression_double + :members: + +--------------------------------------------------------------- + +expression_gdual_double +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: dcgpy.expression_gdual_double + :members: + +--------------------------------------------------------------- + +expression_gdual_vdouble +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: dcgpy.expression_gdual_vdouble + :members: \ No newline at end of file diff --git a/doc/sphinx/docs/python/expression_ann.rst b/doc/sphinx/docs/python/expression_ann.rst new file mode 100644 index 00000000..a40f068b --- /dev/null +++ b/doc/sphinx/docs/python/expression_ann.rst @@ -0,0 +1,9 @@ +expression_ann (dCGP-ANN) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. important:: + This Cartesian Genetic Program is able to encode an Artificial Neural Network. Weights and biases are added to the acyclic graph + as well as extra methods to allow to perform backpropagation (in parallel), to visualize the network and more ... + +.. autoclass:: dcgpy.expression_ann_double + :members: diff --git a/doc/sphinx/docs/python/expression_weighted.rst b/doc/sphinx/docs/python/expression_weighted.rst new file mode 100644 index 00000000..9344c270 --- /dev/null +++ b/doc/sphinx/docs/python/expression_weighted.rst @@ -0,0 +1,33 @@ +expression_weighted (dCGP-W) +---------------------------- + +.. figure:: ../../_static/expression_weighted.png + :alt: weighted dCGP expression + :align: center + +Three types of expression_weighted are currently available in python. +They differ from the type they operate upon: double, gdual, vectorized gdual. + +-------------------------------------------------------- + +expression_weighted_double +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: dcgpy.expression_weighted_double + :members: + +-------------------------------------------------------- + +expression_weighted_gdual_double +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: dcgpy.expression_weighted_gdual_double + :members: + +-------------------------------------------------------- + +expression_weighted_gdual_vdouble +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: dcgpy.expression_weighted_gdual_vdouble + :members: \ No newline at end of file diff --git a/doc/sphinx/docs/python/index.rst b/doc/sphinx/docs/python/index.rst new file mode 100644 index 00000000..c88b655d --- /dev/null +++ b/doc/sphinx/docs/python/index.rst @@ -0,0 +1,92 @@ +.. python docs + +Python Documentation +==================== + +.. contents:: + +Kernels +--------- + +.. figure:: ../../_static/kernels.png + :alt: dCGP kernels + :align: right + :scale: 40 % + +**Kernels**, (also called **non-linearities** in the ANN literature) describe the fundamental computational units of a CGP. +Things like addition, multiplication, trigonomoetric functions are all kernels. The classes :class:`dcgpy.kernel_double`, +:class:`dcgpy.kernel_gdual_double` and :class:`dcgpy.kernel_gdual_vdouble` allow the user +the definition of their own kernels able to operate on the choosen type. + +The most popular kernels are already coded and shipped with dcgpy. A python list containing multiple kernels can be easily instantiated +via the classes :class:`kernel_set_double`, :class:`kernel_set_gdual_double` and :class:`kernel_set_gdual_vdouble`. + +.. toctree:: + :maxdepth: 1 + + kernel + kernel_set + kernel_list + +---------------------------------------------------------------------------------- + +Types of dCGPs +-------------- + +Several types of **Cartesian Genetic Program** are provided in dcgpy. Since a dCGP is some kind of a mathematical expression, +we use the term expression to name the related, different, classes. + +We essentially provide three types of CGPs: + +* **expression**: this is the original CGP as introduced by Miller in 1999. +* **expression_weighted**: this adds to the original CGP formulation weights on each of the graph edges. (original with dCGP - 2016) +* **expression_ann**: this represents an Artificial Neural Network inclusive of biases and weights, via a CGP and allows to learn the model parameters using backproagation. (original with dCGP - 2018) + +Each of the above CGPs can operate over different numerical types. For example an **expression** can operate over floats (:class:`dcgpy.expression_double`), in which case the +result of evaluating the inner computational graph will be a float, but also on gduals (:class:`dcgpy.expression_gdual_double`), in which case, the result of evaluating the +inner computational graph will be a gdual (hence it will contain all the program derivatives up to the chosen order and hence is referred to as a dCGP.) + +Another important type some CGPs can operate upon is the vectorized gdual (:class:`dcgpy.expression_gdual_vdoubles`). This type is the same as the gdual type, but its vectorized, +allowing order of magnitude speed ups when a CGP needs to be evaluated over several points (such as in the case of a loss evaluation) + +.. toctree:: + :maxdepth: 1 + + expression + expression_weighted + expression_ann + +---------------------------------------------------------------------------------- + + +Symbolic Regression +--------------------- + +.. figure:: ../../_static/non_linear_regression.png + :alt: non-linear regression + :align: right + :scale: 70 % + +Mathematically, a symbolic regression problem is a global optimization problem. In order to facilitate its solution, +a number of classes have been designed to interface a dcgpy ``expression`` to the optimisation suite pygmo. +In particular we provide UDPs (in pagmo's jargon user defined problems) that can be used to build :class:`pygmo.problem` objects +(representing symbolic regression problems) and UDAs (in pagmo's jargon user defined algorithms) that can be used +to build :class:`pygmo.algorithm` objects. + +.. toctree:: + :maxdepth: 1 + + symbolic_regression + es4cgp + +We also make available, as a gym to test the capabilities of various proposed methodologies, a number of data sets +coming from different scientific sources. These are collected in what we call the ``dcgpy gym``. + +.. toctree:: + :maxdepth: 1 + + koza_quintic + p_problems + vladislavleva_problems + nist_problems + diff --git a/doc/sphinx/docs/python/kernel.rst b/doc/sphinx/docs/python/kernel.rst new file mode 100644 index 00000000..284cd2eb --- /dev/null +++ b/doc/sphinx/docs/python/kernel.rst @@ -0,0 +1,20 @@ +Kernel +------------- + +kernel_double +^^^^^^^^^^^^^ + +.. autoclass:: dcgpy.kernel_double + :members: + +kernel_gdual_double +^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: dcgpy.kernel_gdual_double + :members: + +kernel_gdual_vdouble +^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: dcgpy.kernel_gdual_vdouble + :members: diff --git a/doc/sphinx/docs/python/kernel_list.rst b/doc/sphinx/docs/python/kernel_list.rst new file mode 100644 index 00000000..f4d35d4a --- /dev/null +++ b/doc/sphinx/docs/python/kernel_list.rst @@ -0,0 +1,50 @@ +Available kernels +---------------------------------- + +When constructing a :class:``dcgpy.kernel_set_double``, :class:``dcgpy.kernel_set_gdual_double `` +or :class:``dcgpy.kernel_set_gdual_vdouble`` we can use the following names to add the corresponding +kernels to the set. + +--------------------------------------------------------------------------- + +.. cssclass:: table-bordered table-striped + + +----------------+-----------------------+ + |Kernel name | Function | + +================+=======================+ + |"sum" |addition | + +----------------+-----------------------+ + |"diff" |subtraction | + +----------------+-----------------------+ + |"mul" |multiplication | + +----------------+-----------------------+ + |"div" |division | + +----------------+-----------------------+ + |"pdiv" |protected division | + +----------------+-----------------------+ + |"sin" |sine | + +----------------+-----------------------+ + |"cos" |cosine | + +----------------+-----------------------+ + |"log" | natural logarithm | + +----------------+-----------------------+ + |"exp" |exponential | + +----------------+-----------------------+ + |"gaussian" |gaussian | + +----------------+-----------------------+ + |"sqrt" |square root | + +----------------+-----------------------+ + | **Suitable for dCGPANN** | + +----------------+-----------------------+ + |"sig" |sigmoid | + +----------------+-----------------------+ + |"tanh" |hyperbolic tangent | + +----------------+-----------------------+ + |"ReLu" |rectified linear unit | + +----------------+-----------------------+ + |"ELU" |exp linear unit | + +----------------+-----------------------+ + |"ISRU" |sigmoid | + +----------------+-----------------------+ + |"sum" |addition | + +----------------+-----------------------+ diff --git a/doc/sphinx/docs/python/kernel_set.rst b/doc/sphinx/docs/python/kernel_set.rst new file mode 100644 index 00000000..e4d41fe8 --- /dev/null +++ b/doc/sphinx/docs/python/kernel_set.rst @@ -0,0 +1,23 @@ +Kernel set +------------- + +kernel_set_double +^^^^^^^^^^^^^^^^^ + +.. autoclass:: dcgpy.kernel_set_double + + .. automethod:: dcgpy.kernel_set_double.push_back() + +kernel_set_gdual_double +^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: dcgpy.kernel_set_gdual_double + + .. automethod:: dcgpy.kernel_set_gdual_double.push_back() + +kernel_set_gdual_vdouble +^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: dcgpy.kernel_set_gdual_vdouble + + .. automethod:: dcgpy.kernel_set_gdual_vdouble.push_back() diff --git a/doc/sphinx/docs/python/koza_quintic.rst b/doc/sphinx/docs/python/koza_quintic.rst new file mode 100644 index 00000000..db791338 --- /dev/null +++ b/doc/sphinx/docs/python/koza_quintic.rst @@ -0,0 +1,4 @@ +Koza Quintic +^^^^^^^^^^^^^ + +.. autofunction:: dcgpy.generate_koza_quintic \ No newline at end of file diff --git a/doc/sphinx/docs/python/nist_problems.rst b/doc/sphinx/docs/python/nist_problems.rst new file mode 100644 index 00000000..fd88d513 --- /dev/null +++ b/doc/sphinx/docs/python/nist_problems.rst @@ -0,0 +1,12 @@ +NIST problems (StRD) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +These problems contain real observation of physical processes +collected in the NIST web pages (https://www.nist.gov/itl) + +.. autofunction:: dcgpy.generate_chwirut1 +.. autofunction:: dcgpy.generate_chwirut2 +.. autofunction:: dcgpy.generate_daniel_wood +.. autofunction:: dcgpy.generate_gauss1 +.. autofunction:: dcgpy.generate_kirby2 +.. autofunction:: dcgpy.generate_lanczos2 +.. autofunction:: dcgpy.generate_misra1b diff --git a/doc/sphinx/docs/python/p_problems.rst b/doc/sphinx/docs/python/p_problems.rst new file mode 100644 index 00000000..574dbb59 --- /dev/null +++ b/doc/sphinx/docs/python/p_problems.rst @@ -0,0 +1,14 @@ +Problems P1-P7 +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +These seven problems are introduced studied in the paper: + +Izzo, Dario, Francesco Biscani, and Alessio Mereta. "Differentiable genetic programming." +European Conference on Genetic Programming. Springer, 2017. + +.. autofunction:: dcgpy.generate_P1 +.. autofunction:: dcgpy.generate_P2 +.. autofunction:: dcgpy.generate_P3 +.. autofunction:: dcgpy.generate_P4 +.. autofunction:: dcgpy.generate_P5 +.. autofunction:: dcgpy.generate_P6 +.. autofunction:: dcgpy.generate_P7 \ No newline at end of file diff --git a/doc/sphinx/docs/python/symbolic_regression.rst b/doc/sphinx/docs/python/symbolic_regression.rst new file mode 100644 index 00000000..e24b75f5 --- /dev/null +++ b/doc/sphinx/docs/python/symbolic_regression.rst @@ -0,0 +1,4 @@ +Symbolic Regression (UDP) +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. autoclass:: dcgpy.symbolic_regression \ No newline at end of file diff --git a/doc/sphinx/docs/python/vladislavleva_problems.rst b/doc/sphinx/docs/python/vladislavleva_problems.rst new file mode 100644 index 00000000..8e91f47e --- /dev/null +++ b/doc/sphinx/docs/python/vladislavleva_problems.rst @@ -0,0 +1,16 @@ +Problems from Vladislavleva +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +These problems are introduced and studied in the paper: + +Vladislavleva, Ekaterina J., Guido F. Smits, and Dick Den Hertog. +"Order of nonlinearity as a complexity measure for models generated by symbolic regression via pareto genetic +programming." IEEE Transactions on Evolutionary Computation 13.2 (2008): 333-349. + +.. autofunction:: dcgpy.generate_kotanchek +.. autofunction:: dcgpy.generate_salutowicz +.. autofunction:: dcgpy.generate_salutowicz2d +.. autofunction:: dcgpy.generate_uball5d +.. autofunction:: dcgpy.generate_ratpol3d +.. autofunction:: dcgpy.generate_sinecosine +.. autofunction:: dcgpy.generate_ripple +.. autofunction:: dcgpy.generate_ratpol2d \ No newline at end of file diff --git a/doc/sphinx/docs/python_docs.rst b/doc/sphinx/docs/python_docs.rst deleted file mode 100644 index 799bc0fe..00000000 --- a/doc/sphinx/docs/python_docs.rst +++ /dev/null @@ -1,104 +0,0 @@ -.. python docs - -Python Documentation -==================== - -.. contents:: - - -Types of dCGPs --------------- - -expression_double -^^^^^^^^^^^^^^^^^ - -.. autoclass:: dcgpy.expression_double - :members: - -expression_gdual_double -^^^^^^^^^^^^^^^^^^^^^^^ - -.. autoclass:: dcgpy.expression_gdual_double - :members: - -expression_gdual_vdouble -^^^^^^^^^^^^^^^^^^^^^^^^ - -.. autoclass:: dcgpy.expression_gdual_vdouble - :members: - -expression_weighted_double -^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. autoclass:: dcgpy.expression_weighted_double - :members: - -expression_weighted_gdual_double -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. autoclass:: dcgpy.expression_weighted_gdual_double - :members: - -expression_weighted_gdual_vdouble -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -.. autoclass:: dcgpy.expression_weighted_gdual_vdouble - :members: - -expression_ann_double -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -.. important:: - This Cartesian Genetic Program is able to encode an Artificial Neural Network. Weights and biases are added to the acyclic graph - as well as extra methods to allow to perform backpropagation (in parallel), to visualize the network and more ... - -.. autoclass:: dcgpy.expression_ann_double - :members: - -Non linearities --------------------- - -kernel_double -^^^^^^^^^^^^^ - -.. autoclass:: dcgpy.kernel_double - :members: - -kernel_gdual_double -^^^^^^^^^^^^^^^^^^^ - -.. autoclass:: dcgpy.kernel_gdual_double - :members: - -kernel_gdual_vdouble -^^^^^^^^^^^^^^^^^^^^ - -.. autoclass:: dcgpy.kernel_gdual_vdouble - :members: - -kernel_set -^^^^^^^^^^ - -For a list of the available kernels see :ref:`kernels `. - -kernel_set_double -^^^^^^^^^^^^^^^^^ - -.. autoclass:: dcgpy.kernel_set_double - - .. automethod:: dcgpy.kernel_set_double.push_back() - -kernel_set_gdual_double -^^^^^^^^^^^^^^^^^^^^^^^ - -.. autoclass:: dcgpy.kernel_set_gdual_double - - .. automethod:: dcgpy.kernel_set_gdual_double.push_back() - -kernel_set_gdual_vdouble -^^^^^^^^^^^^^^^^^^^^^^^^ - -.. autoclass:: dcgpy.kernel_set_gdual_vdouble - - .. automethod:: dcgpy.kernel_set_gdual_vdouble.push_back() diff --git a/doc/sphinx/installation.rst b/doc/sphinx/installation.rst index 1b234544..4ffddc7f 100644 --- a/doc/sphinx/installation.rst +++ b/doc/sphinx/installation.rst @@ -11,7 +11,6 @@ C++ dCGP is a header-only library which has the following third party dependencies: -* `Piranha `_, header-only library (git clone https://github.com/bluescarni/piranha.git). **Version 0.11 is REQUIRED**. * `AuDi `_, header-only library (git clone https://github.com/darioizzo/audi.git) * `Boost `_, headers only (needs the libraries if you intend to use the python bindings) diff --git a/doc/sphinx/theory.rst b/doc/sphinx/theory.rst index 5934fa9c..8071f4f3 100644 --- a/doc/sphinx/theory.rst +++ b/doc/sphinx/theory.rst @@ -1,13 +1,13 @@ .. contents:: -Cartesian Genetic Programming -============================= +Cartesian Genetic Programming (CGP) +==================================== Cartesian Genetic Programming (CGP) is a form of Genetic Programming where the program -representation consists of a graph. For more information visit +representation consists of an acyclic graph. For more information visit `Cartesian Genetic Programming `_. -dCGP -==== +Differentiable Cartesian Genetic Programming (dCGP) +=================================================== Differentiable Cartesian Genetic Programming (dCGP) is a recent development of CGP that adds the information about the derivatives of the output nodes (the programs, or expressions encoded) with respect to the input nodes (the input values) and/or the @@ -31,12 +31,12 @@ currently the subject of active research. The evolution of the genetic program can now be supported by using the information on the derivatives, hence enabling for the equivalent of back-propagation in Neural Networks. -Furthermore, the fitness function itself can be defined in terms of the derivatives, -allowing for additional tasks beyond simple regression, *e.g.*: +Furthermore, the fitness function itself can be defined in terms of the derivatives. +The applications of a dCGP are: -* solving differential equations, -* learning differential models, -* capturing conserved quantities in dynamical systems. +* Symbolic Regression. +* Solving differential equations. +* Search for conserved quantities in dynamical systems. .. _reference: diff --git a/examples/data/chwirut1.data b/examples/data/chwirut1.data deleted file mode 100644 index 2e033c13..00000000 --- a/examples/data/chwirut1.data +++ /dev/null @@ -1,215 +0,0 @@ -1,1,214, -92.9000E0,0.5000E0, -78.7000E0,0.6250E0, -64.2000E0,0.7500E0, -64.9000E0,0.8750E0, -57.1000E0,1.0000E0, -43.3000E0,1.2500E0, -31.1000E0,1.7500E0, -23.6000E0,2.2500E0, -31.0500E0,1.7500E0, -23.7750E0,2.2500E0, -17.7375E0,2.7500E0, -13.8000E0,3.2500E0, -11.5875E0,3.7500E0, - 9.4125E0,4.2500E0, - 7.7250E0,4.7500E0, - 7.3500E0,5.2500E0, - 8.0250E0,5.7500E0, -90.6000E0,0.5000E0, -76.9000E0,0.6250E0, -71.6000E0,0.7500E0, -63.6000E0,0.8750E0, -54.0000E0,1.0000E0, -39.2000E0,1.2500E0, -29.3000E0,1.7500E0, -21.4000E0,2.2500E0, -29.1750E0,1.7500E0, -22.1250E0,2.2500E0, -17.5125E0,2.7500E0, -14.2500E0,3.2500E0, - 9.4500E0,3.7500E0, - 9.1500E0,4.2500E0, - 7.9125E0,4.7500E0, - 8.4750E0,5.2500E0, - 6.1125E0,5.7500E0, -80.0000E0,0.5000E0, -79.0000E0,0.6250E0, -63.8000E0,0.7500E0, -57.2000E0,0.8750E0, -53.2000E0,1.0000E0, -42.5000E0,1.2500E0, -26.8000E0,1.7500E0, -20.4000E0,2.2500E0, -26.8500E0,1.7500E0, -21.0000E0,2.2500E0, -16.4625E0,2.7500E0, -12.5250E0,3.2500E0, -10.5375E0,3.7500E0, - 8.5875E0,4.2500E0, - 7.1250E0,4.7500E0, - 6.1125E0,5.2500E0, - 5.9625E0,5.7500E0, -74.1000E0,0.5000E0, -67.3000E0,0.6250E0, -60.8000E0,0.7500E0, -55.5000E0,0.8750E0, -50.3000E0,1.0000E0, -41.0000E0,1.2500E0, -29.4000E0,1.7500E0, -20.4000E0,2.2500E0, -29.3625E0,1.7500E0, -21.1500E0,2.2500E0, -16.7625E0,2.7500E0, -13.2000E0,3.2500E0, -10.8750E0,3.7500E0, - 8.1750E0,4.2500E0, - 7.3500E0,4.7500E0, - 5.9625E0,5.2500E0, - 5.6250E0,5.7500E0, -81.5000E0, .5000E0, -62.4000E0, .7500E0, -32.5000E0,1.5000E0, -12.4100E0,3.0000E0, -13.1200E0,3.0000E0, -15.5600E0,3.0000E0, - 5.6300E0,6.0000E0, -78.0000E0, .5000E0, -59.9000E0, .7500E0, -33.2000E0,1.5000E0, -13.8400E0,3.0000E0, -12.7500E0,3.0000E0, -14.6200E0,3.0000E0, - 3.9400E0,6.0000E0, -76.8000E0, .5000E0, -61.0000E0, .7500E0, -32.9000E0,1.5000E0, -13.8700E0,3.0000E0, -11.8100E0,3.0000E0, -13.3100E0,3.0000E0, - 5.4400E0,6.0000E0, -78.0000E0, .5000E0, -63.5000E0, .7500E0, -33.8000E0,1.5000E0, -12.5600E0,3.0000E0, - 5.6300E0,6.0000E0, -12.7500E0,3.0000E0, -13.1200E0,3.0000E0, - 5.4400E0,6.0000E0, -76.8000E0, .5000E0, -60.0000E0, .7500E0, -47.8000E0,1.0000E0, -32.0000E0,1.5000E0, -22.2000E0,2.0000E0, -22.5700E0,2.0000E0, -18.8200E0,2.5000E0, -13.9500E0,3.0000E0, -11.2500E0,4.0000E0, - 9.0000E0,5.0000E0, - 6.6700E0,6.0000E0, -75.8000E0, .5000E0, -62.0000E0, .7500E0, -48.8000E0,1.0000E0, -35.2000E0,1.5000E0, -20.0000E0,2.0000E0, -20.3200E0,2.0000E0, -19.3100E0,2.5000E0, -12.7500E0,3.0000E0, -10.4200E0,4.0000E0, - 7.3100E0,5.0000E0, - 7.4200E0,6.0000E0, -70.5000E0, .5000E0, -59.5000E0, .7500E0, -48.5000E0,1.0000E0, -35.8000E0,1.5000E0, -21.0000E0,2.0000E0, -21.6700E0,2.0000E0, -21.0000E0,2.5000E0, -15.6400E0,3.0000E0, - 8.1700E0,4.0000E0, - 8.5500E0,5.0000E0, -10.1200E0,6.0000E0, -78.0000E0, .5000E0, -66.0000E0, .6250E0, -62.0000E0, .7500E0, -58.0000E0, .8750E0, -47.7000E0,1.0000E0, -37.8000E0,1.2500E0, -20.2000E0,2.2500E0, -21.0700E0,2.2500E0, -13.8700E0,2.7500E0, - 9.6700E0,3.2500E0, - 7.7600E0,3.7500E0, - 5.4400E0,4.2500E0, - 4.8700E0,4.7500E0, - 4.0100E0,5.2500E0, - 3.7500E0,5.7500E0, -24.1900E0,3.0000E0, -25.7600E0,3.0000E0, -18.0700E0,3.0000E0, -11.8100E0,3.0000E0, -12.0700E0,3.0000E0, -16.1200E0,3.0000E0, -70.8000E0, .5000E0, -54.7000E0, .7500E0, -48.0000E0,1.0000E0, -39.8000E0,1.5000E0, -29.8000E0,2.0000E0, -23.7000E0,2.5000E0, -29.6200E0,2.0000E0, -23.8100E0,2.5000E0, -17.7000E0,3.0000E0, -11.5500E0,4.0000E0, -12.0700E0,5.0000E0, - 8.7400E0,6.0000E0, -80.7000E0, .5000E0, -61.3000E0, .7500E0, -47.5000E0,1.0000E0, -29.0000E0,1.5000E0, -24.0000E0,2.0000E0, -17.7000E0,2.5000E0, -24.5600E0,2.0000E0, -18.6700E0,2.5000E0, -16.2400E0,3.0000E0, - 8.7400E0,4.0000E0, - 7.8700E0,5.0000E0, - 8.5100E0,6.0000E0, -66.7000E0, .5000E0, -59.2000E0, .7500E0, -40.8000E0,1.0000E0, -30.7000E0,1.5000E0, -25.7000E0,2.0000E0, -16.3000E0,2.5000E0, -25.9900E0,2.0000E0, -16.9500E0,2.5000E0, -13.3500E0,3.0000E0, - 8.6200E0,4.0000E0, - 7.2000E0,5.0000E0, - 6.6400E0,6.0000E0, -13.6900E0,3.0000E0, -81.0000E0, .5000E0, -64.5000E0, .7500E0, -35.5000E0,1.5000E0, -13.3100E0,3.0000E0, - 4.8700E0,6.0000E0, -12.9400E0,3.0000E0, - 5.0600E0,6.0000E0, -15.1900E0,3.0000E0, -14.6200E0,3.0000E0, -15.6400E0,3.0000E0, -25.5000E0,1.7500E0, -25.9500E0,1.7500E0, -81.7000E0, .5000E0, -61.6000E0, .7500E0, -29.8000E0,1.7500E0, -29.8100E0,1.7500E0, -17.1700E0,2.7500E0, -10.3900E0,3.7500E0, -28.4000E0,1.7500E0, -28.6900E0,1.7500E0, -81.3000E0, .5000E0, -60.9000E0, .7500E0, -16.6500E0,2.7500E0, -10.0500E0,3.7500E0, -28.9000E0,1.7500E0, -28.9500E0,1.7500E0 \ No newline at end of file diff --git a/examples/data/chwirut2.data b/examples/data/chwirut2.data deleted file mode 100644 index 934b0b97..00000000 --- a/examples/data/chwirut2.data +++ /dev/null @@ -1,55 +0,0 @@ -1,1,54, -92.9000E0, 0.500E0, -57.1000E0, 1.000E0, -31.0500E0, 1.750E0, -11.5875E0, 3.750E0, -8.0250E0, 5.750E0, -63.6000E0, 0.875E0, -21.4000E0, 2.250E0, -14.2500E0, 3.250E0, -8.4750E0, 5.250E0, -63.8000E0, 0.750E0, -26.8000E0, 1.750E0, -16.4625E0, 2.750E0, -7.1250E0, 4.750E0, -67.3000E0, 0.625E0, -41.0000E0, 1.250E0, -21.1500E0, 2.250E0, -8.1750E0, 4.250E0, -81.5000E0, 0.500E0, -13.1200E0, 3.000E0, -59.9000E0, 0.750E0, -14.6200E0, 3.000E0, -32.9000E0, 1.500E0, -5.4400E0, 6.000E0, -12.5600E0, 3.000E0, -5.4400E0, 6.000E0, -32.0000E0, 1.500E0, -13.9500E0, 3.000E0, -75.8000E0, 0.500E0, -20.0000E0, 2.000E0, -10.4200E0, 4.000E0, -59.5000E0, 0.750E0, -21.6700E0, 2.000E0, -8.5500E0, 5.000E0, -62.0000E0, 0.750E0, -20.2000E0, 2.250E0, -7.7600E0, 3.750E0, -3.7500E0, 5.750E0, -11.8100E0, 3.000E0, -54.7000E0, 0.750E0, -23.7000E0, 2.500E0, -11.5500E0, 4.000E0, -61.3000E0, 0.750E0, -17.7000E0, 2.500E0, -8.7400E0, 4.000E0, -59.2000E0, 0.750E0, -16.3000E0, 2.500E0, -8.6200E0, 4.000E0, -81.0000E0, 0.500E0, -4.8700E0, 6.000E0, -14.6200E0, 3.000E0, -81.7000E0, 0.500E0, -17.1700E0, 2.750E0, -81.3000E0, 0.500E0, -28.9000E0, 1.750E0 \ No newline at end of file diff --git a/examples/data/daniel_wood.data b/examples/data/daniel_wood.data deleted file mode 100644 index de61aa1f..00000000 --- a/examples/data/daniel_wood.data +++ /dev/null @@ -1,7 +0,0 @@ -1,1,6, -2.138E0, 1.309E0, -3.421E0, 1.471E0, -3.597E0, 1.490E0, -4.340E0, 1.565E0, -4.882E0, 1.611E0, -5.660E0, 1.680E0 \ No newline at end of file diff --git a/examples/data/gauss1.data b/examples/data/gauss1.data deleted file mode 100644 index ee7b7190..00000000 --- a/examples/data/gauss1.data +++ /dev/null @@ -1,251 +0,0 @@ - 1,1,250, - 97.62227, 1.000000, - 97.80724, 2.000000, - 96.62247, 3.000000, - 92.59022, 4.000000, - 91.23869, 5.000000, - 95.32704, 6.000000, - 90.35040, 7.000000, - 89.46235, 8.000000, - 91.72520, 9.000000, - 89.86916, 10.000000, - 86.88076, 11.00000, - 85.94360, 12.00000, - 87.60686, 13.00000, - 86.25839, 14.00000, - 80.74976, 15.00000, - 83.03551, 16.00000, - 88.25837, 17.00000, - 82.01316, 18.00000, - 82.74098, 19.00000, - 83.30034, 20.00000, - 81.27850, 21.00000, - 81.85506, 22.00000, - 80.75195, 23.00000, - 80.09573, 24.00000, - 81.07633, 25.00000, - 78.81542, 26.00000, - 78.38596, 27.00000, - 79.93386, 28.00000, - 79.48474, 29.00000, - 79.95942, 30.00000, - 76.10691, 31.00000, - 78.39830, 32.00000, - 81.43060, 33.00000, - 82.48867, 34.00000, - 81.65462, 35.00000, - 80.84323, 36.00000, - 88.68663, 37.00000, - 84.74438, 38.00000, - 86.83934, 39.00000, - 85.97739, 40.00000, - 91.28509, 41.00000, - 97.22411, 42.00000, - 93.51733, 43.00000, - 94.10159, 44.00000, -101.91760, 45.00000, - 98.43134, 46.00000, - 110.4214, 47.00000, - 107.6628, 48.00000, - 111.7288, 49.00000, - 116.5115, 50.00000, - 120.7609, 51.00000, - 123.9553, 52.00000, - 124.2437, 53.00000, - 130.7996, 54.00000, - 133.2960, 55.00000, - 130.7788, 56.00000, - 132.0565, 57.00000, - 138.6584, 58.00000, - 142.9252, 59.00000, - 142.7215, 60.00000, - 144.1249, 61.00000, - 147.4377, 62.00000, - 148.2647, 63.00000, - 152.0519, 64.00000, - 147.3863, 65.00000, - 149.2074, 66.00000, - 148.9537, 67.00000, - 144.5876, 68.00000, - 148.1226, 69.00000, - 148.0144, 70.00000, - 143.8893, 71.00000, - 140.9088, 72.00000, - 143.4434, 73.00000, - 139.3938, 74.00000, - 135.9878, 75.00000, - 136.3927, 76.00000, - 126.7262, 77.00000, - 124.4487, 78.00000, - 122.8647, 79.00000, - 113.8557, 80.00000, - 113.7037, 81.00000, - 106.8407, 82.00000, - 107.0034, 83.00000, -102.46290, 84.00000, - 96.09296, 85.00000, - 94.57555, 86.00000, - 86.98824, 87.00000, - 84.90154, 88.00000, - 81.18023, 89.00000, - 76.40117, 90.00000, - 67.09200, 91.00000, - 72.67155, 92.00000, - 68.10848, 93.00000, - 67.99088, 94.00000, - 63.34094, 95.00000, - 60.55253, 96.00000, - 56.18687, 97.00000, - 53.64482, 98.00000, - 53.70307, 99.00000, - 48.07893, 100.00000, - 42.21258, 101.00000, - 45.65181, 102.00000, - 41.69728, 103.00000, - 41.24946, 104.00000, - 39.21349, 105.00000, - 37.71696, 106.0000, - 36.68395, 107.0000, - 37.30393, 108.0000, - 37.43277, 109.0000, - 37.45012, 110.0000, - 32.64648, 111.0000, - 31.84347, 112.0000, - 31.39951, 113.0000, - 26.68912, 114.0000, - 32.25323, 115.0000, - 27.61008, 116.0000, - 33.58649, 117.0000, - 28.10714, 118.0000, - 30.26428, 119.0000, - 28.01648, 120.0000, - 29.11021, 121.0000, - 23.02099, 122.0000, - 25.65091, 123.0000, - 28.50295, 124.0000, - 25.23701, 125.0000, - 26.13828, 126.0000, - 33.53260, 127.0000, - 29.25195, 128.0000, - 27.09847, 129.0000, - 26.52999, 130.0000, - 25.52401, 131.0000, - 26.69218, 132.0000, - 24.55269, 133.0000, - 27.71763, 134.0000, - 25.20297, 135.0000, - 25.61483, 136.0000, - 25.06893, 137.0000, - 27.63930, 138.0000, - 24.94851, 139.0000, - 25.86806, 140.0000, - 22.48183, 141.0000, - 26.90045, 142.0000, - 25.39919, 143.0000, - 17.90614, 144.0000, - 23.76039, 145.0000, - 25.89689, 146.0000, - 27.64231, 147.0000, - 22.86101, 148.0000, - 26.47003, 149.0000, - 23.72888, 150.0000, - 27.54334, 151.0000, - 30.52683, 152.0000, - 28.07261, 153.0000, - 34.92815, 154.0000, - 28.29194, 155.0000, - 34.19161, 156.0000, - 35.41207, 157.0000, - 37.09336, 158.0000, - 40.98330, 159.0000, - 39.53923, 160.0000, - 47.80123, 161.0000, - 47.46305, 162.0000, - 51.04166, 163.0000, - 54.58065, 164.0000, - 57.53001, 165.0000, - 61.42089, 166.0000, - 62.79032, 167.0000, - 68.51455, 168.0000, - 70.23053, 169.0000, - 74.42776, 170.0000, - 76.59911, 171.0000, - 81.62053, 172.0000, - 83.42208, 173.0000, - 79.17451, 174.0000, - 88.56985, 175.0000, - 85.66525, 176.0000, - 86.55502, 177.0000, - 90.65907, 178.0000, - 84.27290, 179.0000, - 85.72220, 180.0000, - 83.10702, 181.0000, - 82.16884, 182.0000, - 80.42568, 183.0000, - 78.15692, 184.0000, - 79.79691, 185.0000, - 77.84378, 186.0000, - 74.50327, 187.0000, - 71.57289, 188.0000, - 65.88031, 189.0000, - 65.01385, 190.0000, - 60.19582, 191.0000, - 59.66726, 192.0000, - 52.95478, 193.0000, - 53.87792, 194.0000, - 44.91274, 195.0000, - 41.09909, 196.0000, - 41.68018, 197.0000, - 34.53379, 198.0000, - 34.86419, 199.0000, - 33.14787, 200.0000, - 29.58864, 201.0000, - 27.29462, 202.0000, - 21.91439, 203.0000, - 19.08159, 204.0000, - 24.90290, 205.0000, - 19.82341, 206.0000, - 16.75551, 207.0000, - 18.24558, 208.0000, - 17.23549, 209.0000, - 16.34934, 210.0000, - 13.71285, 211.0000, - 14.75676, 212.0000, - 13.97169, 213.0000, - 12.42867, 214.0000, - 14.35519, 215.0000, - 7.703309, 216.0000, -10.234410, 217.0000, - 11.78315, 218.0000, - 13.87768, 219.0000, - 4.535700, 220.0000, -10.059280, 221.0000, - 8.424824, 222.0000, -10.533120, 223.0000, - 9.602255, 224.0000, - 7.877514, 225.0000, - 6.258121, 226.0000, - 8.899865, 227.0000, - 7.877754, 228.0000, - 12.51191, 229.0000, - 10.66205, 230.0000, - 6.035400, 231.0000, - 6.790655, 232.0000, - 8.783535, 233.0000, - 4.600288, 234.0000, - 8.400915, 235.0000, - 7.216561, 236.0000, -10.017410, 237.0000, - 7.331278, 238.0000, - 6.527863, 239.0000, - 2.842001, 240.0000, -10.325070, 241.0000, - 4.790995, 242.0000, - 8.377101, 243.0000, - 6.264445, 244.0000, - 2.706213, 245.0000, - 8.362329, 246.0000, - 8.983658, 247.0000, - 3.362571, 248.0000, - 1.182746, 249.0000, - 4.875359, 250.0000 \ No newline at end of file diff --git a/examples/data/gauss2.data b/examples/data/gauss2.data deleted file mode 100644 index 21e023fe..00000000 --- a/examples/data/gauss2.data +++ /dev/null @@ -1,251 +0,0 @@ - 1,1,250, - 97.58776, 1.000000, - 97.76344, 2.000000, - 96.56705, 3.000000, - 92.52037, 4.000000, - 91.15097, 5.000000, - 95.21728, 6.000000, - 90.21355, 7.000000, - 89.29235, 8.000000, - 91.51479, 9.000000, - 89.60966,10.000000, - 86.56187, 11.00000, - 85.55316, 12.00000, - 87.13054, 13.00000, - 85.67940, 14.00000, - 80.04851, 15.00000, - 82.18925, 16.00000, - 87.24081, 17.00000, - 80.79407, 18.00000, - 81.28570, 19.00000, - 81.56940, 20.00000, - 79.22715, 21.00000, - 79.43275, 22.00000, - 77.90195, 23.00000, - 76.75468, 24.00000, - 77.17377, 25.00000, - 74.27348, 26.00000, - 73.11900, 27.00000, - 73.84826, 28.00000, - 72.47870, 29.00000, - 71.92292, 30.00000, - 66.92176, 31.00000, - 67.93835, 32.00000, - 69.56207, 33.00000, - 69.07066, 34.00000, - 66.53983, 35.00000, - 63.87883, 36.00000, - 69.71537, 37.00000, - 63.60588, 38.00000, - 63.37154, 39.00000, - 60.01835, 40.00000, - 62.67481, 41.00000, - 65.80666, 42.00000, - 59.14304, 43.00000, - 56.62951, 44.00000, - 61.21785, 45.00000, - 54.38790, 46.00000, - 62.93443, 47.00000, - 56.65144, 48.00000, - 57.13362, 49.00000, - 58.29689, 50.00000, - 58.91744, 51.00000, - 58.50172, 52.00000, - 55.22885, 53.00000, - 58.30375, 54.00000, - 57.43237, 55.00000, - 51.69407, 56.00000, - 49.93132, 57.00000, - 53.70760, 58.00000, - 55.39712, 59.00000, - 52.89709, 60.00000, - 52.31649, 61.00000, - 53.98720, 62.00000, - 53.54158, 63.00000, - 56.45046, 64.00000, - 51.32276, 65.00000, - 53.11676, 66.00000, - 53.28631, 67.00000, - 49.80555, 68.00000, - 54.69564, 69.00000, - 56.41627, 70.00000, - 54.59362, 71.00000, - 54.38520, 72.00000, - 60.15354, 73.00000, - 59.78773, 74.00000, - 60.49995, 75.00000, - 65.43885, 76.00000, - 60.70001, 77.00000, - 63.71865, 78.00000, - 67.77139, 79.00000, - 64.70934, 80.00000, - 70.78193, 81.00000, - 70.38651, 82.00000, - 77.22359, 83.00000, - 79.52665, 84.00000, - 80.13077, 85.00000, - 85.67823, 86.00000, - 85.20647, 87.00000, - 90.24548, 88.00000, - 93.61953, 89.00000, - 95.86509, 90.00000, - 93.46992, 91.00000, - 105.8137, 92.00000, - 107.8269, 93.00000, - 114.0607, 94.00000, - 115.5019, 95.00000, - 118.5110, 96.00000, - 119.6177, 97.00000, - 122.1940, 98.00000, - 126.9903, 99.00000, - 125.7005,100.00000, - 123.7447,101.00000, - 130.6543,102.00000, - 129.7168,103.00000, - 131.8240,104.00000, - 131.8759,105.00000, - 131.9994, 106.0000, - 132.1221, 107.0000, - 133.4414, 108.0000, - 133.8252, 109.0000, - 133.6695, 110.0000, - 128.2851, 111.0000, - 126.5182, 112.0000, - 124.7550, 113.0000, - 118.4016, 114.0000, - 122.0334, 115.0000, - 115.2059, 116.0000, - 118.7856, 117.0000, - 110.7387, 118.0000, - 110.2003, 119.0000, -105.17290, 120.0000, -103.44720, 121.0000, - 94.54280, 122.0000, - 94.40526, 123.0000, - 94.57964, 124.0000, - 88.76605, 125.0000, - 87.28747, 126.0000, - 92.50443, 127.0000, - 86.27997, 128.0000, - 82.44307, 129.0000, - 80.47367, 130.0000, - 78.36608, 131.0000, - 78.74307, 132.0000, - 76.12786, 133.0000, - 79.13108, 134.0000, - 76.76062, 135.0000, - 77.60769, 136.0000, - 77.76633, 137.0000, - 81.28220, 138.0000, - 79.74307, 139.0000, - 81.97964, 140.0000, - 80.02952, 141.0000, - 85.95232, 142.0000, - 85.96838, 143.0000, - 79.94789, 144.0000, - 87.17023, 145.0000, - 90.50992, 146.0000, - 93.23373, 147.0000, - 89.14803, 148.0000, - 93.11492, 149.0000, - 90.34337, 150.0000, - 93.69421, 151.0000, - 95.74256, 152.0000, - 91.85105, 153.0000, - 96.74503, 154.0000, - 87.60996, 155.0000, - 90.47012, 156.0000, - 88.11690, 157.0000, - 85.70673, 158.0000, - 85.01361, 159.0000, - 78.53040, 160.0000, - 81.34148, 161.0000, - 75.19295, 162.0000, - 72.66115, 163.0000, - 69.85504, 164.0000, - 66.29476, 165.0000, - 63.58502, 166.0000, - 58.33847, 167.0000, - 57.50766, 168.0000, - 52.80498, 169.0000, - 50.79319, 170.0000, - 47.03490, 171.0000, - 46.47090, 172.0000, - 43.09016, 173.0000, - 34.11531, 174.0000, - 39.28235, 175.0000, - 32.68386, 176.0000, - 30.44056, 177.0000, - 31.98932, 178.0000, - 23.63330, 179.0000, - 23.69643, 180.0000, - 20.26812, 181.0000, - 19.07074, 182.0000, - 17.59544, 183.0000, - 16.08785, 184.0000, - 18.94267, 185.0000, - 18.61354, 186.0000, - 17.25800, 187.0000, - 16.62285, 188.0000, - 13.48367, 189.0000, - 15.37647, 190.0000, - 13.47208, 191.0000, - 15.96188, 192.0000, - 12.32547, 193.0000, - 16.33880, 194.0000, -10.438330, 195.0000, - 9.628715, 196.0000, - 13.12268, 197.0000, - 8.772417, 198.0000, - 11.76143, 199.0000, - 12.55020, 200.0000, - 11.33108, 201.0000, - 11.20493, 202.0000, - 7.816916, 203.0000, - 6.800675, 204.0000, - 14.26581, 205.0000, - 10.66285, 206.0000, - 8.911574, 207.0000, - 11.56733, 208.0000, - 11.58207, 209.0000, - 11.59071, 210.0000, - 9.730134, 211.0000, - 11.44237, 212.0000, - 11.22912, 213.0000, -10.172130, 214.0000, - 12.50905, 215.0000, - 6.201493, 216.0000, - 9.019605, 217.0000, - 10.80607, 218.0000, - 13.09625, 219.0000, - 3.914271, 220.0000, - 9.567886, 221.0000, - 8.038448, 222.0000, -10.231040, 223.0000, - 9.367410, 224.0000, - 7.695971, 225.0000, - 6.118575, 226.0000, - 8.793207, 227.0000, - 7.796692, 228.0000, - 12.45065, 229.0000, - 10.61601, 230.0000, - 6.001003, 231.0000, - 6.765098, 232.0000, - 8.764653, 233.0000, - 4.586418, 234.0000, - 8.390783, 235.0000, - 7.209202, 236.0000, -10.012090, 237.0000, - 7.327461, 238.0000, - 6.525136, 239.0000, - 2.840065, 240.0000, -10.323710, 241.0000, - 4.790035, 242.0000, - 8.376431, 243.0000, - 6.263980, 244.0000, - 2.705892, 245.0000, - 8.362109, 246.0000, - 8.983507, 247.0000, - 3.362469, 248.0000, - 1.182678, 249.0000, - 4.875312, 250.0000 \ No newline at end of file diff --git a/examples/data/kirby2.data b/examples/data/kirby2.data deleted file mode 100644 index e1dccbf2..00000000 --- a/examples/data/kirby2.data +++ /dev/null @@ -1,152 +0,0 @@ -1,1,151, -0.0082E0,9.65E0, -0.0112E0,10.74E0, -0.0149E0,11.81E0, -0.0198E0,12.88E0, -0.0248E0,14.06E0, -0.0324E0,15.28E0, -0.0420E0,16.63E0, -0.0549E0,18.19E0, -0.0719E0,19.88E0, -0.0963E0,21.84E0, -0.1291E0,24.00E0, -0.1710E0,26.25E0, -0.2314E0,28.86E0, -0.3227E0,31.85E0, -0.4809E0,35.79E0, -0.7084E0,40.18E0, -1.0220E0,44.74E0, -1.4580E0,49.53E0, -1.9520E0,53.94E0, -2.5410E0,58.29E0, -3.2230E0,62.63E0, -3.9990E0,67.03E0, -4.8520E0,71.25E0, -5.7320E0,75.22E0, -6.7270E0,79.33E0, -7.8350E0,83.56E0, -9.0250E0,87.75E0, -10.2670E0,91.93E0, -11.5780E0,96.10E0, -12.9440E0,100.28E0, -14.3770E0,104.46E0, -15.8560E0,108.66E0, -17.3310E0,112.71E0, -18.8850E0,116.88E0, -20.5750E0,121.33E0, -22.3200E0,125.79E0, -22.3030E0,125.79E0, -23.4600E0,128.74E0, -24.0600E0,130.27E0, -25.2720E0,133.33E0, -25.8530E0,134.79E0, -27.1100E0,137.93E0, -27.6580E0,139.33E0, -28.9240E0,142.46E0, -29.5110E0,143.90E0, -30.7100E0,146.91E0, -31.3500E0,148.51E0, -32.5200E0,151.41E0, -33.2300E0,153.17E0, -34.3300E0,155.97E0, -35.0600E0,157.76E0, -36.1700E0,160.56E0, -36.8400E0,162.30E0, -38.0100E0,165.21E0, -38.6700E0,166.90E0, -39.8700E0,169.92E0, -40.0300E0,170.32E0, -40.5000E0,171.54E0, -41.3700E0,173.79E0, -41.6700E0,174.57E0, -42.3100E0,176.25E0, -42.7300E0,177.34E0, -43.4600E0,179.19E0, -44.1400E0,181.02E0, -44.5500E0,182.08E0, -45.2200E0,183.88E0, -45.9200E0,185.75E0, -46.3000E0,186.80E0, -47.0000E0,188.63E0, -47.6800E0,190.45E0, -48.0600E0,191.48E0, -48.7400E0,193.35E0, -49.4100E0,195.22E0, -49.7600E0,196.23E0, -50.4300E0,198.05E0, -51.1100E0,199.97E0, -51.5000E0,201.06E0, -52.1200E0,202.83E0, -52.7600E0,204.69E0, -53.1800E0,205.86E0, -53.7800E0,207.58E0, -54.4600E0,209.50E0, -54.8300E0,210.65E0, -55.4000E0,212.33E0, -56.4300E0,215.43E0, -57.0300E0,217.16E0, -58.0000E0,220.21E0, -58.6100E0,221.98E0, -59.5800E0,225.06E0, -60.1100E0,226.79E0, -61.1000E0,229.92E0, -61.6500E0,231.69E0, -62.5900E0,234.77E0, -63.1200E0,236.60E0, -64.0300E0,239.63E0, -64.6200E0,241.50E0, -65.4900E0,244.48E0, -66.0300E0,246.40E0, -66.8900E0,249.35E0, -67.4200E0,251.32E0, -68.2300E0,254.22E0, -68.7700E0,256.24E0, -69.5900E0,259.11E0, -70.1100E0,261.18E0, -70.8600E0,264.02E0, -71.4300E0,266.13E0, -72.1600E0,268.94E0, -72.7000E0,271.09E0, -73.4000E0,273.87E0, -73.9300E0,276.08E0, -74.6000E0,278.83E0, -75.1600E0,281.08E0, -75.8200E0,283.81E0, -76.3400E0,286.11E0, -76.9800E0,288.81E0, -77.4800E0,291.08E0, -78.0800E0,293.75E0, -78.6000E0,295.99E0, -79.1700E0,298.64E0, -79.6200E0,300.84E0, -79.8800E0,302.02E0, -80.1900E0,303.48E0, -80.6600E0,305.65E0, -81.2200E0,308.27E0, -81.6600E0,310.41E0, -82.1600E0,313.01E0, -82.5900E0,315.12E0, -83.1400E0,317.71E0, -83.5000E0,319.79E0, -84.0000E0,322.36E0, -84.4000E0,324.42E0, -84.8900E0,326.98E0, -85.2600E0,329.01E0, -85.7400E0,331.56E0, -86.0700E0,333.56E0, -86.5400E0,336.10E0, -86.8900E0,338.08E0, -87.3200E0,340.60E0, -87.6500E0,342.57E0, -88.1000E0,345.08E0, -88.4300E0,347.02E0, -88.8300E0,349.52E0, -89.1200E0,351.44E0, -89.5400E0,353.93E0, -89.8500E0,355.83E0, -90.2500E0,358.32E0, -90.5500E0,360.20E0, -90.9300E0,362.67E0, -91.2000E0,364.53E0, -91.5500E0,367.00E0, -92.2000E0,371.30E0 \ No newline at end of file diff --git a/examples/data/lanczos3.data b/examples/data/lanczos3.data deleted file mode 100644 index 11badcfb..00000000 --- a/examples/data/lanczos3.data +++ /dev/null @@ -1,25 +0,0 @@ -1,1,23, -2.5134E+00,0.00000E+00, -2.0443E+00,5.00000E-02, -1.6684E+00,1.00000E-01, -1.3664E+00,1.50000E-01, -1.1232E+00,2.00000E-01, -0.9269E+00,2.50000E-01, -0.7679E+00,3.00000E-01, -0.6389E+00,3.50000E-01, -0.5338E+00,4.00000E-01, -0.4479E+00,4.50000E-01, -0.3776E+00,5.00000E-01, -0.3197E+00,5.50000E-01, -0.2720E+00,6.00000E-01, -0.2325E+00,6.50000E-01, -0.1997E+00,7.00000E-01, -0.1723E+00,7.50000E-01, -0.1493E+00,8.00000E-01, -0.1301E+00,8.50000E-01, -0.1138E+00,9.00000E-01, -0.1000E+00,9.50000E-01, -0.0883E+00,1.00000E+00, -0.0783E+00,1.05000E+00, -0.0698E+00,1.10000E+00, -0.0624E+00,1.15000E+00 \ No newline at end of file diff --git a/examples/data/misra1a.data b/examples/data/misra1a.data deleted file mode 100644 index 11d82447..00000000 --- a/examples/data/misra1a.data +++ /dev/null @@ -1,15 +0,0 @@ -1,1,14, -10.07E0,77.6E0, -14.73E0,114.9E0, -17.94E0,141.1E0, -23.93E0,190.8E0, -29.61E0,239.9E0, -35.18E0,289.0E0, -40.02E0,332.8E0, -44.82E0,378.4E0, -50.76E0,434.8E0, -55.05E0,477.3E0, -61.01E0,536.8E0, -66.40E0,593.1E0, -75.47E0,689.1E0, -81.78E0,760.0E0 \ No newline at end of file diff --git a/examples/data/misra1b.data b/examples/data/misra1b.data deleted file mode 100644 index 0d2dd684..00000000 --- a/examples/data/misra1b.data +++ /dev/null @@ -1,15 +0,0 @@ -1,1,14, -10.07E0, 77.6E0, -14.73E0, 114.9E0, -17.94E0, 141.1E0, -23.93E0, 190.8E0, -29.61E0, 239.9E0, -35.18E0, 289.0E0, -40.02E0, 332.8E0, -44.82E0, 378.4E0, -50.76E0, 434.8E0, -55.05E0, 477.3E0, -61.01E0, 536.8E0, -66.40E0, 593.1E0, -75.47E0, 689.1E0, -81.78E0, 760.0E0 \ No newline at end of file diff --git a/examples/data/pressure.data b/examples/data/pressure.data deleted file mode 100644 index dad929a6..00000000 --- a/examples/data/pressure.data +++ /dev/null @@ -1,10001 +0,0 @@ -2,1,10000, --1.71481604244,-1.71481604244,0.335533716244, --1.71481604244,-1.68017329411,0.307290891228, --1.71481604244,-1.64553054577,0.27904788585, --1.71481604244,-1.61088779744,0.250807162666, --1.71481604244,-1.57624504911,0.222563301729, --1.71481604244,-1.54160230078,0.194323401996, --1.71481604244,-1.50695955245,0.166078937421, --1.71481604244,-1.47231680411,0.137838491085, --1.71481604244,-1.43767405578,0.109592410469, --1.71481604244,-1.40303130745,0.0813531632637, --1.71481604244,-1.36838855912,0.0531108589803, --1.71481604244,-1.33374581079,0.0248647439247, --1.71481604244,-1.29910306245,-0.00337312633448, --1.71481604244,-1.26446031412,-0.031612689107, --1.71481604244,-1.22981756579,-0.0598626256089, --1.71481604244,-1.19517481746,-0.0880960590151, --1.71481604244,-1.16053206913,-0.116351704223, --1.71481604244,-1.12588932079,-0.1445869812, --1.71481604244,-1.09124657246,-0.172829543097, --1.71481604244,-1.05660382413,-0.201071063962, --1.71481604244,-1.0219610758,-0.229313077924, --1.71481604244,-0.987318327465,-0.257557716867, --1.71481604244,-0.952675579133,-0.285796829706, --1.71481604244,-0.918032830801,-0.314041475297, --1.71481604244,-0.883390082469,-0.342284475075, --1.71481604244,-0.848747334136,-0.370526033439, --1.71481604244,-0.814104585804,-0.398765929752, --1.71481604244,-0.779461837472,-0.427013090228, --1.71481604244,-0.74481908914,-0.455248429029, --1.71481604244,-0.710176340808,-0.483497369941, --1.71481604244,-0.675533592476,-0.511738056327, --1.71481604244,-0.640890844144,-0.539976357447, --1.71481604244,-0.606248095812,-0.568223218551, --1.71481604244,-0.57160534748,-0.596462417134, --1.71481604244,-0.536962599148,-0.624705851164, --1.71481604244,-0.502319850815,-0.652949767717, --1.71481604244,-0.467677102483,-0.681191947641, --1.71481604244,-0.433034354151,-0.709432203045, --1.71481604244,-0.398391605819,-0.737674783264, --1.71481604244,-0.363748857487,-0.765916548978, --1.71481604244,-0.329106109155,-0.794161157058, --1.71481604244,-0.294463360823,-0.822403916265, --1.71481604244,-0.259820612491,-0.85064340747, --1.71481604244,-0.225177864159,-0.878885503723, --1.71481604244,-0.190535115827,-0.907133947383, --1.71481604244,-0.155892367494,-0.935372213707, --1.71481604244,-0.121249619162,-0.963615172139, --1.71481604244,-0.0866068708302,-0.991853452827, --1.71481604244,-0.0519641224981,-1.02009455468, --1.71481604244,-0.017321374166,-1.04834465344, --1.71481604244,0.017321374166,-1.07658447321, --1.71481604244,0.0519641224981,-1.10482629318, --1.71481604244,0.0866068708302,-1.13306981123, --1.71481604244,0.121249619162,-1.16131208832, --1.71481604244,0.155892367494,-1.18955579126, --1.71481604244,0.190535115827,-1.21779483729, --1.71481604244,0.225177864159,-1.24603964837, --1.71481604244,0.259820612491,-1.27428297243, --1.71481604244,0.294463360823,-1.30252561565, --1.71481604244,0.329106109155,-1.33076916332, --1.71481604244,0.363748857487,-1.35900950592, --1.71481604244,0.398391605819,-1.38725525259, --1.71481604244,0.433034354151,-1.41549015475, --1.71481604244,0.467677102483,-1.44373824106, --1.71481604244,0.502319850815,-1.4719811613, --1.71481604244,0.536962599148,-1.50022226761, --1.71481604244,0.57160534748,-1.5284539723, --1.71481604244,0.606248095812,-1.55670394707, --1.71481604244,0.640890844144,-1.5849467855, --1.71481604244,0.675533592476,-1.61318812879, --1.71481604244,0.710176340808,-1.6414322601, --1.71481604244,0.74481908914,-1.66967597674, --1.71481604244,0.779461837472,-1.69791778298, --1.71481604244,0.814104585804,-1.72616008538, --1.71481604244,0.848747334136,-1.75440313844, --1.71481604244,0.883390082469,-1.78264112531, --1.71481604244,0.918032830801,-1.81088872234, --1.71481604244,0.952675579133,-1.83912943967, --1.71481604244,0.987318327465,-1.86737563393, --1.71481604244,1.0219610758,-1.89560869807, --1.71481604244,1.05660382413,-1.92385893979, --1.71481604244,1.09124657246,-1.95209210888, --1.71481604244,1.12588932079,-1.98033444189, --1.71481604244,1.16053206913,-2.00858220251, --1.71481604244,1.19517481746,-2.03682585395, --1.71481604244,1.22981756579,-2.0650668784, --1.71481604244,1.26446031412,-2.09331009674, --1.71481604244,1.29910306245,-2.12155055921, --1.71481604244,1.33374581079,-2.14979507708, --1.71481604244,1.36838855912,-2.17803821137, --1.71481604244,1.40303130745,-2.20627973996, --1.71481604244,1.43767405578,-2.2345210195, --1.71481604244,1.47231680411,-2.26276536343, --1.71481604244,1.50695955245,-2.29100402385, --1.71481604244,1.54160230078,-2.31924808025, --1.71481604244,1.57624504911,-2.34748669035, --1.71481604244,1.61088779744,-2.37572792444, --1.71481604244,1.64553054577,-2.4039716489, --1.71481604244,1.68017329411,-2.4322193197, --1.71481604244,1.71481604244,-2.46046017494, --1.68017329411,-1.71481604244,0.338779723639, --1.68017329411,-1.68017329411,0.306588931303, --1.68017329411,-1.64553054577,0.274730351346, --1.68017329411,-1.61088779744,0.243482509041, --1.68017329411,-1.57624504911,0.213029581905, --1.68017329411,-1.54160230078,0.183424600171, --1.68017329411,-1.50695955245,0.154619747998, --1.68017329411,-1.47231680411,0.126469734174, --1.68017329411,-1.43767405578,0.0987915214832, --1.68017329411,-1.40303130745,0.0713682326704, --1.68017329411,-1.36838855912,0.0440655903285, --1.68017329411,-1.33374581079,0.0167722191329, --1.68017329411,-1.29910306245,-0.0106198635174, --1.68017329411,-1.26446031412,-0.038136369663, --1.68017329411,-1.22981756579,-0.0657383887867, --1.68017329411,-1.19517481746,-0.0934376955918, --1.68017329411,-1.16053206913,-0.121166142341, --1.68017329411,-1.12588932079,-0.14891204033, --1.68017329411,-1.09124657246,-0.176604994901, --1.68017329411,-1.05660382413,-0.204224663597, --1.68017329411,-1.0219610758,-0.231746601627, --1.68017329411,-0.987318327465,-0.259164883381, --1.68017329411,-0.952675579133,-0.286490639286, --1.68017329411,-0.918032830801,-0.313720390848, --1.68017329411,-0.883390082469,-0.340888999535, --1.68017329411,-0.848747334136,-0.368032026087, --1.68017329411,-0.814104585804,-0.395170603536, --1.68017329411,-0.779461837472,-0.422336813412, --1.68017329411,-0.74481908914,-0.44956417392, --1.68017329411,-0.710176340808,-0.476859055029, --1.68017329411,-0.675533592476,-0.504248554696, --1.68017329411,-0.640890844144,-0.531727550614, --1.68017329411,-0.606248095812,-0.55931560896, --1.68017329411,-0.57160534748,-0.587010930989, --1.68017329411,-0.536962599148,-0.614768788344, --1.68017329411,-0.502319850815,-0.642620477928, --1.68017329411,-0.467677102483,-0.670536808496, --1.68017329411,-0.433034354151,-0.698502266469, --1.68017329411,-0.398391605819,-0.726509535372, --1.68017329411,-0.363748857487,-0.754527434738, --1.68017329411,-0.329106109155,-0.782559191145, --1.68017329411,-0.294463360823,-0.810589591979, --1.68017329411,-0.259820612491,-0.838601114452, --1.68017329411,-0.225177864159,-0.866598120484, --1.68017329411,-0.190535115827,-0.894578733848, --1.68017329411,-0.155892367494,-0.922523784907, --1.68017329411,-0.121249619162,-0.950458065312, --1.68017329411,-0.0866068708302,-0.978383108575, --1.68017329411,-0.0519641224981,-1.0062973875, --1.68017329411,-0.017321374166,-1.03421254783, --1.68017329411,0.017321374166,-1.06212971096, --1.68017329411,0.0519641224981,-1.09006746974, --1.68017329411,0.0866068708302,-1.11801990826, --1.68017329411,0.121249619162,-1.14600157137, --1.68017329411,0.155892367494,-1.17401700291, --1.68017329411,0.190535115827,-1.20206697011, --1.68017329411,0.225177864159,-1.23015765503, --1.68017329411,0.259820612491,-1.2582911882, --1.68017329411,0.294463360823,-1.28646529236, --1.68017329411,0.329106109155,-1.31467624858, --1.68017329411,0.363748857487,-1.34293566996, --1.68017329411,0.398391605819,-1.37123402239, --1.68017329411,0.433034354151,-1.3995591389, --1.68017329411,0.467677102483,-1.42792955686, --1.68017329411,0.502319850815,-1.45631250728, --1.68017329411,0.536962599148,-1.48473651386, --1.68017329411,0.57160534748,-1.51317123175, --1.68017329411,0.606248095812,-1.54163729785, --1.68017329411,0.640890844144,-1.5701128381, --1.68017329411,0.675533592476,-1.59860320559, --1.68017329411,0.710176340808,-1.62710514034, --1.68017329411,0.74481908914,-1.65561585589, --1.68017329411,0.779461837472,-1.68413121259, --1.68017329411,0.814104585804,-1.71265837074, --1.68017329411,0.848747334136,-1.74118781496, --1.68017329411,0.883390082469,-1.76972001092, --1.68017329411,0.918032830801,-1.798252353, --1.68017329411,0.952675579133,-1.82679421528, --1.68017329411,0.987318327465,-1.85533192832, --1.68017329411,1.0219610758,-1.88388166373, --1.68017329411,1.05660382413,-1.91242313189, --1.68017329411,1.09124657246,-1.94096934592, --1.68017329411,1.12588932079,-1.96951341663, --1.68017329411,1.16053206913,-1.99805245164, --1.68017329411,1.19517481746,-2.02658971918, --1.68017329411,1.22981756579,-2.05512644972, --1.68017329411,1.26446031412,-2.0836611322, --1.68017329411,1.29910306245,-2.11219155537, --1.68017329411,1.33374581079,-2.14071823239, --1.68017329411,1.36838855912,-2.1692399395, --1.68017329411,1.40303130745,-2.19775695129, --1.68017329411,1.43767405578,-2.22626832155, --1.68017329411,1.47231680411,-2.25477542925, --1.68017329411,1.50695955245,-2.28326785052, --1.68017329411,1.54160230078,-2.31176185551, --1.68017329411,1.57624504911,-2.34024390006, --1.68017329411,1.61088779744,-2.36872465521, --1.68017329411,1.64553054577,-2.39720285822, --1.68017329411,1.68017329411,-2.42566961007, --1.68017329411,1.71481604244,-2.45412385124, --1.64553054577,-1.71481604244,0.362894982734, --1.64553054577,-1.68017329411,-1.43045266097, --1.64553054577,-1.64553054577,-1.71291026716, --1.64553054577,-1.61088779744,-1.48482913844, --1.64553054577,-1.57624504911,-1.48589737357, --1.64553054577,-1.54160230078,-1.49437678605, --1.64553054577,-1.50695955245,-1.58186100138, --1.64553054577,-1.47231680411,-1.59342510415, --1.64553054577,-1.43767405578,-1.56271970991, --1.64553054577,-1.40303130745,-1.6682973877, --1.64553054577,-1.36838855912,-1.55852354167, --1.64553054577,-1.33374581079,-1.58423961667, --1.64553054577,-1.29910306245,-1.73260237609, --1.64553054577,-1.26446031412,-1.86508619288, --1.64553054577,-1.22981756579,-1.65989095154, --1.64553054577,-1.19517481746,-1.78213197602, --1.64553054577,-1.16053206913,-2.23203805688, --1.64553054577,-1.12588932079,-1.98210274496, --1.64553054577,-1.09124657246,-1.812002085, --1.64553054577,-1.05660382413,-2.04310682805, --1.64553054577,-1.0219610758,-1.8214608435, --1.64553054577,-0.987318327465,-2.24322145392, --1.64553054577,-0.952675579133,-2.27340935039, --1.64553054577,-0.918032830801,-1.98294767189, --1.64553054577,-0.883390082469,-0.311127304182, --1.64553054577,-0.848747334136,-0.331814765966, --1.64553054577,-0.814104585804,-0.354398373644, --1.64553054577,-0.779461837472,-0.378177837568, --1.64553054577,-0.74481908914,-0.402849350152, --1.64553054577,-0.710176340808,-0.428239215806, --1.64553054577,-0.675533592476,-0.454221283556, --1.64553054577,-0.640890844144,-0.480761328124, --1.64553054577,-0.606248095812,-0.507784066056, --1.64553054577,-0.57160534748,-0.535180954599, --1.64553054577,-0.536962599148,-0.562916924138, --1.64553054577,-0.502319850815,-0.59091913759, --1.64553054577,-0.467677102483,-0.61914660693, --1.64553054577,-0.433034354151,-0.647524244098, --1.64553054577,-0.398391605819,-0.675988690415, --1.64553054577,-0.363748857487,-0.704489877283, --1.64553054577,-0.329106109155,-0.732993723353, --1.64553054577,-0.294463360823,-0.761453723467, --1.64553054577,-0.259820612491,-0.789850018174, --1.64553054577,-0.225177864159,-0.818175449531, --1.64553054577,-0.190535115827,-0.846399103038, --1.64553054577,-0.155892367494,-0.874538906988, --1.64553054577,-0.121249619162,-0.902599508784, --1.64553054577,-0.0866068708302,-0.930599849298, --1.64553054577,-0.0519641224981,-0.958564837535, --1.64553054577,-0.017321374166,-0.986508138071, --1.64553054577,0.017321374166,-1.01446253102, --1.64553054577,0.0519641224981,-1.04244063263, --1.64553054577,0.0866068708302,-1.07045778516, --1.64553054577,0.121249619162,-1.09854036213, --1.64553054577,0.155892367494,-1.12670386142, --1.64553054577,0.190535115827,-1.15494710094, --1.64553054577,0.225177864159,-1.18328319642, --1.64553054577,0.259820612491,-1.21172240425, --1.64553054577,0.294463360823,-1.24025468794, --1.64553054577,0.329106109155,-1.26887843589, --1.64553054577,0.363748857487,-1.29760321211, --1.64553054577,0.398391605819,-1.32641773498, --1.64553054577,0.433034354151,-1.35531584109, --1.64553054577,0.467677102483,-1.38428074897, --1.64553054577,0.502319850815,-1.41330821061, --1.64553054577,0.536962599148,-1.44239361394, --1.64553054577,0.57160534748,-1.47153237947, --1.64553054577,0.606248095812,-1.50072265089, --1.64553054577,0.640890844144,-1.52993373344, --1.64553054577,0.675533592476,-1.55916862185, --1.64553054577,0.710176340808,-1.58842742796, --1.64553054577,0.74481908914,-1.61770793839, --1.64553054577,0.779461837472,-1.64700026634, --1.64553054577,0.814104585804,-1.67630379182, --1.64553054577,0.848747334136,-1.70561009518, --1.64553054577,0.883390082469,-1.73492683242, --1.64553054577,0.918032830801,-1.76423754128, --1.64553054577,0.952675579133,-1.79356180291, --1.64553054577,0.987318327465,-1.82287923088, --1.64553054577,1.0219610758,-1.85219782652, --1.64553054577,1.05660382413,-1.88151935513, --1.64553054577,1.09124657246,-1.91083904931, --1.64553054577,1.12588932079,-1.94015084053, --1.64553054577,1.16053206913,-1.96946284373, --1.64553054577,1.19517481746,-1.99877182167, --1.64553054577,1.22981756579,-2.02805387248, --1.64553054577,1.26446031412,-2.05733731695, --1.64553054577,1.29910306245,-2.08660731449, --1.64553054577,1.33374581079,-2.11586057717, --1.64553054577,1.36838855912,-2.14509962017, --1.64553054577,1.40303130745,-2.17431919974, --1.64553054577,1.43767405578,-2.20352354024, --1.64553054577,1.47231680411,-2.23270379875, --1.64553054577,1.50695955245,-2.2618650534, --1.64553054577,1.54160230078,-2.29100402385, --1.64553054577,1.57624504911,-2.32012043247, --1.64553054577,1.61088779744,-2.34921236991, --1.64553054577,1.64553054577,-2.37829432102, --1.64553054577,1.68017329411,-2.4073477202, --1.64553054577,1.71481604244,-2.43639138465, --1.61088779744,-1.71481604244,0.472278576288, --1.61088779744,-1.68017329411,0.442467249784, --1.61088779744,-1.64553054577,0.413267050875, --1.61088779744,-1.61088779744,-1.6424980722, --1.61088779744,-1.57624504911,-1.72673967688, --1.61088779744,-1.54160230078,-1.75524522402, --1.61088779744,-1.50695955245,-1.33918963169, --1.61088779744,-1.47231680411,0.304418400776, --1.61088779744,-1.43767405578,0.283934647615, --1.61088779744,-1.40303130745,0.262217453102, --1.61088779744,-1.36838855912,0.23922426084, --1.61088779744,-1.33374581079,0.215036759553, --1.61088779744,-1.29910306245,0.189778282854, --1.61088779744,-1.26446031412,0.163520107392, --1.61088779744,-1.22981756579,0.136449822371, --1.61088779744,-1.19517481746,0.108658340922, --1.61088779744,-1.16053206913,0.0803545693002, --1.61088779744,-1.12588932079,0.0516231595699, --1.61088779744,-1.09124657246,0.0225710367822, --1.61088779744,-1.05660382413,-0.00664268423833, --1.61088779744,-1.0219610758,-0.0359708537753, --1.61088779744,-0.987318327465,-0.0653019471858, --1.61088779744,-0.952675579133,-0.0946368586948, --1.61088779744,-0.918032830801,-0.123964096625, --1.61088779744,-0.883390082469,-0.153259744605, --1.61088779744,-0.848747334136,-0.182565033449, --1.61088779744,-0.814104585804,-0.211910950263, --1.61088779744,-0.779461837472,-0.241297370323, --1.61088779744,-0.74481908914,-0.270821426263, --1.61088779744,-0.710176340808,-0.300481396317, --1.61088779744,-0.675533592476,-0.330307324176, --1.61088779744,-0.640890844144,-0.360306733041, --1.61088779744,-0.606248095812,-0.390487892549, --1.61088779744,-0.57160534748,-0.420845030539, --1.61088779744,-0.536962599148,-0.45136887727, --1.61088779744,-0.502319850815,-0.482031357847, --1.61088779744,-0.467677102483,-0.512809016312, --1.61088779744,-0.433034354151,-0.543648837954, --1.61088779744,-0.398391605819,-0.574536900864, --1.61088779744,-0.363748857487,-0.605425214174, --1.61088779744,-0.329106109155,-0.636256630519, --1.61088779744,-0.294463360823,-0.667008431063, --1.61088779744,-0.259820612491,-0.697625702942, --1.61088779744,-0.225177864159,-0.72811494226, --1.61088779744,-0.190535115827,-0.758447709044, --1.61088779744,-0.155892367494,-0.788615697995, --1.61088779744,-0.121249619162,-0.818613989045, --1.61088779744,-0.0866068708302,-0.848476681178, --1.61088779744,-0.0519641224981,-0.878194605298, --1.61088779744,-0.017321374166,-0.907823393635, --1.61088779744,0.017321374166,-0.937385688077, --1.61088779744,0.0519641224981,-0.966877230968, --1.61088779744,0.0866068708302,-0.99635564881, --1.61088779744,0.121249619162,-1.02582328848, --1.61088779744,0.155892367494,-1.05533344365, --1.61088779744,0.190535115827,-1.08485765111, --1.61088779744,0.225177864159,-1.11444746764, --1.61088779744,0.259820612491,-1.14410578486, --1.61088779744,0.294463360823,-1.173830402, --1.61088779744,0.329106109155,-1.20363111194, --1.61088779744,0.363748857487,-1.23351843792, --1.61088779744,0.398391605819,-1.26346906901, --1.61088779744,0.433034354151,-1.29349339423, --1.61088779744,0.467677102483,-1.32357478452, --1.61088779744,0.502319850815,-1.35371623427, --1.61088779744,0.536962599148,-1.3839143323, --1.61088779744,0.57160534748,-1.41414548156, --1.61088779744,0.606248095812,-1.44440758831, --1.61088779744,0.640890844144,-1.47470960336, --1.61088779744,0.675533592476,-1.50502651888, --1.61088779744,0.710176340808,-1.53534815757, --1.61088779744,0.74481908914,-1.56567505783, --1.61088779744,0.779461837472,-1.59601098419, --1.61088779744,0.814104585804,-1.62634966325, --1.61088779744,0.848747334136,-1.65668702065, --1.61088779744,0.883390082469,-1.68702372744, --1.61088779744,0.918032830801,-1.71735286658, --1.61088779744,0.952675579133,-1.74767089001, --1.61088779744,0.987318327465,-1.77798613138, --1.61088779744,1.0219610758,-1.80829918181, --1.61088779744,1.05660382413,-1.83859836537, --1.61088779744,1.09124657246,-1.86888904473, --1.61088779744,1.12588932079,-1.89917626106, --1.61088779744,1.16053206913,-1.92944039921, --1.61088779744,1.19517481746,-1.9596900134, --1.61088779744,1.22981756579,-1.98993012629, --1.61088779744,1.26446031412,-2.02015152799, --1.61088779744,1.29910306245,-2.05034828225, --1.61088779744,1.33374581079,-2.08051798762, --1.61088779744,1.36838855912,-2.11066047465, --1.61088779744,1.40303130745,-2.14077315515, --1.61088779744,1.43767405578,-2.17085823637, --1.61088779744,1.47231680411,-2.20090456586, --1.61088779744,1.50695955245,-2.23091496049, --1.61088779744,1.54160230078,-2.26089066012, --1.61088779744,1.57624504911,-2.29083123864, --1.61088779744,1.61088779744,-2.32072950746, --1.61088779744,1.64553054577,-2.35059914959, --1.61088779744,1.68017329411,-2.39101639439, --1.61088779744,1.71481604244,-2.41024669001, --1.57624504911,-1.71481604244,0.591784758682, --1.57624504911,-1.68017329411,0.57296911045, --1.57624504911,-1.64553054577,0.553394319407, --1.57624504911,-1.61088779744,0.533207911925, --1.57624504911,-1.57624504911,0.512421847116, --1.57624504911,-1.54160230078,0.490994322621, --1.57624504911,-1.50695955245,0.468856381866, --1.57624504911,-1.47231680411,0.445965571726, --1.57624504911,-1.43767405578,0.422276414061, --1.57624504911,-1.40303130745,0.397811950237, --1.57624504911,-1.36838855912,0.372565273297, --1.57624504911,-1.33374581079,0.346600660255, --1.57624504911,-1.29910306245,0.319942319127, --1.57624504911,-1.26446031412,0.292671824328, --1.57624504911,-1.22981756579,0.265146148645, --1.57624504911,-1.19517481746,0.236798214364, --1.57624504911,-1.16053206913,0.208039864777, --1.57624504911,-1.12588932079,0.178895572902, --1.57624504911,-1.09124657246,0.149448885115, --1.57624504911,-1.05660382413,0.119750958644, --1.57624504911,-1.0219610758,0.0898512481989, --1.57624504911,-0.987318327465,0.0597609370638, --1.57624504911,-0.952675579133,0.0295343884742, --1.57624504911,-0.918032830801,-0.0008194746664, --1.57624504911,-0.883390082469,-0.0312913559915, --1.57624504911,-0.848747334136,-0.0618438281275, --1.57624504911,-0.814104585804,-0.092518827268, --1.57624504911,-0.779461837472,-0.123307778632, --1.57624504911,-0.74481908914,-0.154223429408, --1.57624504911,-0.710176340808,-0.185266153678, --1.57624504911,-0.675533592476,-0.216432926715, --1.57624504911,-0.640890844144,-0.247733719519, --1.57624504911,-0.606248095812,-0.279171943343, --1.57624504911,-0.57160534748,-0.310725850686, --1.57624504911,-0.536962599148,-0.342427862414, --1.57624504911,-0.502319850815,-0.374222244143, --1.57624504911,-0.467677102483,-0.40612347298, --1.57624504911,-0.433034354151,-0.438085772208, --1.57624504911,-0.398391605819,-0.470109926835, --1.57624504911,-0.363748857487,-0.503722283087, --1.57624504911,-0.329106109155,-0.534795908555, --1.57624504911,-0.294463360823,-0.565917828467, --1.57624504911,-0.259820612491,-0.597430316637, --1.57624504911,-0.225177864159,-0.629408295771, --1.57624504911,-0.190535115827,-0.66132649667, --1.57624504911,-0.155892367494,-0.693180566888, --1.57624504911,-0.121249619162,-0.72492765719, --1.57624504911,-0.0866068708302,-0.756588673958, --1.57624504911,-0.0519641224981,-0.788162835969, --1.57624504911,-0.017321374166,-0.819633210764, --1.57624504911,0.017321374166,-0.851042938584, --1.57624504911,0.0519641224981,-0.882367846405, --1.57624504911,0.0866068708302,-0.913646432713, --1.57624504911,0.121249619162,-0.944879748588, --1.57624504911,0.155892367494,-0.97607179927, --1.57624504911,0.190535115827,-1.00726177699, --1.57624504911,0.225177864159,-1.0384385283, --1.57624504911,0.259820612491,-1.06963929704, --1.57624504911,0.294463360823,-1.10084169258, --1.57624504911,0.329106109155,-1.13207253443, --1.57624504911,0.363748857487,-1.16339878121, --1.57624504911,0.398391605819,-1.19497974662, --1.57624504911,0.433034354151,-1.2265533912, --1.57624504911,0.467677102483,-1.25794796298, --1.57624504911,0.502319850815,-1.28924148325, --1.57624504911,0.536962599148,-1.32056500333, --1.57624504911,0.57160534748,-1.35190457793, --1.57624504911,0.606248095812,-1.38325831766, --1.57624504911,0.640890844144,-1.41462547903, --1.57624504911,0.675533592476,-1.44600779427, --1.57624504911,0.710176340808,-1.47738593697, --1.57624504911,0.74481908914,-1.50876238165, --1.57624504911,0.779461837472,-1.54011861668, --1.57624504911,0.814104585804,-1.57146949137, --1.57624504911,0.848747334136,-1.60281155832, --1.57624504911,0.883390082469,-1.63414379078, --1.57624504911,0.918032830801,-1.66545884808, --1.57624504911,0.952675579133,-1.69675510171, --1.57624504911,0.987318327465,-1.72804728519, --1.57624504911,1.0219610758,-1.75931751118, --1.57624504911,1.05660382413,-1.79056837767, --1.57624504911,1.09124657246,-1.82181044255, --1.57624504911,1.12588932079,-1.85303139264, --1.57624504911,1.16053206913,-1.88423562817, --1.57624504911,1.19517481746,-1.91542222054, --1.57624504911,1.22981756579,-1.94658240791, --1.57624504911,1.26446031412,-1.97771934943, --1.57624504911,1.29910306245,-2.00882152136, --1.57624504911,1.33374581079,-2.07084203768, --1.57624504911,1.36838855912,-2.09992104753, --1.57624504911,1.40303130745,-2.12909790673, --1.57624504911,1.43767405578,-2.15837093986, --1.57624504911,1.47231680411,-2.18770988239, --1.57624504911,1.50695955245,-2.21710549306, --1.57624504911,1.54160230078,-2.2465588746, --1.57624504911,1.57624504911,-2.276052931, --1.57624504911,1.61088779744,-2.30559211117, --1.57624504911,1.64553054577,-2.33515571213, --1.57624504911,1.68017329411,-2.36474248701, --1.57624504911,1.71481604244,-2.39434622924, --1.54160230078,-1.71481604244,0.685295658248, --1.54160230078,-1.68017329411,0.669406657661, --1.54160230078,-1.64553054577,0.651855041022, --1.54160230078,-1.61088779744,0.632913088252, --1.54160230078,-1.57624504911,0.612728451819, --1.54160230078,-1.54160230078,0.591459790682, --1.54160230078,-1.50695955245,0.569177815973, --1.54160230078,-1.47231680411,0.54596392776, --1.54160230078,-1.43767405578,0.521884360663, --1.54160230078,-1.40303130745,0.497002455836, --1.54160230078,-1.36838855912,0.471383583994, --1.54160230078,-1.33374581079,0.445082450728, --1.54160230078,-1.29910306245,0.418146001388, --1.54160230078,-1.26446031412,0.390652996657, --1.54160230078,-1.22981756579,0.362622508038, --1.54160230078,-1.19517481746,0.334146114375, --1.54160230078,-1.16053206913,0.305229703679, --1.54160230078,-1.12588932079,0.275977821565, --1.54160230078,-1.09124657246,0.246405508287, --1.54160230078,-1.05660382413,0.216548474586, --1.54160230078,-1.0219610758,0.186457787958, --1.54160230078,-0.987318327465,0.156135256896, --1.54160230078,-0.952675579133,0.125621396258, --1.54160230078,-0.918032830801,0.0949425235662, --1.54160230078,-0.883390082469,0.0641083517568, --1.54160230078,-0.848747334136,0.033114569055, --1.54160230078,-0.814104585804,0.00197509059947, --1.54160230078,-0.779461837472,-0.0292915365005, --1.54160230078,-0.74481908914,-0.060699522786, --1.54160230078,-0.710176340808,-0.0922616460662, --1.54160230078,-0.675533592476,-0.123945315169, --1.54160230078,-0.640890844144,-0.155770960991, --1.54160230078,-0.606248095812,-0.187730888773, --1.54160230078,-0.57160534748,-0.219815744898, --1.54160230078,-0.536962599148,-0.252014990396, --1.54160230078,-0.502319850815,-0.284325142496, --1.54160230078,-0.467677102483,-0.316740379511, --1.54160230078,-0.433034354151,-0.349238429836, --1.54160230078,-0.398391605819,-0.38180976754, --1.54160230078,-0.363748857487,-0.414433706993, --1.54160230078,-0.329106109155,-0.447108647162, --1.54160230078,-0.294463360823,-0.47895759899, --1.54160230078,-0.259820612491,-0.511852531837, --1.54160230078,-0.225177864159,-0.544738240333, --1.54160230078,-0.190535115827,-0.577592999418, --1.54160230078,-0.155892367494,-0.610396601078, --1.54160230078,-0.121249619162,-0.643135208566, --1.54160230078,-0.0866068708302,-0.6758086731, --1.54160230078,-0.0519641224981,-0.708399837212, --1.54160230078,-0.017321374166,-0.74092093584, --1.54160230078,0.017321374166,-0.773379715649, --1.54160230078,0.0519641224981,-0.805772310827, --1.54160230078,0.0866068708302,-0.838129916294, --1.54160230078,0.121249619162,-0.870440115171, --1.54160230078,0.155892367494,-0.902730665527, --1.54160230078,0.190535115827,-0.935002671923, --1.54160230078,0.225177864159,-0.967273671426, --1.54160230078,0.259820612491,-0.999531085824, --1.54160230078,0.294463360823,-1.03180124162, --1.54160230078,0.329106109155,-1.06409747433, --1.54160230078,0.363748857487,-1.09638075799, --1.54160230078,0.398391605819,-1.12869082817, --1.54160230078,0.433034354151,-1.16101171483, --1.54160230078,0.467677102483,-1.19334863863, --1.54160230078,0.502319850815,-1.22569128048, --1.54160230078,0.536962599148,-1.25803876018, --1.54160230078,0.57160534748,-1.29039228064, --1.54160230078,0.606248095812,-1.32274696977, --1.54160230078,0.640890844144,-1.35509585793, --1.54160230078,0.675533592476,-1.38742709523, --1.54160230078,0.710176340808,-1.41975767613, --1.54160230078,0.74481908914,-1.45206450163, --1.54160230078,0.779461837472,-1.48436643809, --1.54160230078,0.814104585804,-1.51664578983, --1.54160230078,0.848747334136,-1.60822981134, --1.54160230078,0.883390082469,-1.63640727901, --1.54160230078,0.918032830801,-1.66504529966, --1.54160230078,0.952675579133,-1.694054829, --1.54160230078,0.987318327465,-1.72334679668, --1.54160230078,1.0219610758,-1.75286254844, --1.54160230078,1.05660382413,-1.78256064827, --1.54160230078,1.09124657246,-1.8124134084, --1.54160230078,1.12588932079,-1.84239946756, --1.54160230078,1.16053206913,-1.87248230828, --1.54160230078,1.19517481746,-1.90265005463, --1.54160230078,1.22981756579,-1.93290113638, --1.54160230078,1.26446031412,-1.96322219752, --1.54160230078,1.29910306245,-1.9935800819, --1.54160230078,1.33374581079,-2.02400132918, --1.54160230078,1.36838855912,-2.05444094919, --1.54160230078,1.40303130745,-2.08491428794, --1.54160230078,1.43767405578,-2.11541691135, --1.54160230078,1.47231680411,-2.14593504621, --1.54160230078,1.50695955245,-2.15664092889, --1.54160230078,1.54160230078,-2.18824471312, --1.54160230078,1.57624504911,-2.21979895972, --1.54160230078,1.61088779744,-2.25130115939, --1.54160230078,1.64553054577,-2.28274559119, --1.54160230078,1.68017329411,-2.31414669878, --1.54160230078,1.71481604244,-2.34549537691, --1.50695955245,-1.71481604244,0.761501235254, --1.50695955245,-1.68017329411,0.746830755463, --1.50695955245,-1.64553054577,0.730065993221, --1.50695955245,-1.61088779744,0.711581899538, --1.50695955245,-1.57624504911,0.69163264775, --1.50695955245,-1.54160230078,0.670413706502, --1.50695955245,-1.50695955245,0.648088045076, --1.50695955245,-1.47231680411,0.624758054939, --1.50695955245,-1.43767405578,0.600541629262, --1.50695955245,-1.40303130745,0.575501558076, --1.50695955245,-1.36838855912,0.549743633957, --1.50695955245,-1.33374581079,0.523301125133, --1.50695955245,-1.29910306245,0.496254491867, --1.50695955245,-1.26446031412,0.468654454549, --1.50695955245,-1.22981756579,0.44056180455, --1.50695955245,-1.19517481746,0.412002032207, --1.50695955245,-1.16053206913,0.38306258589, --1.50695955245,-1.12588932079,0.353472531998, --1.50695955245,-1.09124657246,0.323842098651, --1.50695955245,-1.05660382413,0.293921589723, --1.50695955245,-1.0219610758,0.263724560851, --1.50695955245,-0.987318327465,0.23330063955, --1.50695955245,-0.952675579133,0.202669360889, --1.50695955245,-0.918032830801,0.171832280598, --1.50695955245,-0.883390082469,0.140826910475, --1.50695955245,-0.848747334136,0.109633956842, --1.50695955245,-0.814104585804,0.0782940242083, --1.50695955245,-0.779461837472,0.0468023750671, --1.50695955245,-0.74481908914,0.0151425952662, --1.50695955245,-0.710176340808,-0.0166362623584, --1.50695955245,-0.675533592476,-0.0485726082019, --1.50695955245,-0.640890844144,-0.0806341096656, --1.50695955245,-0.606248095812,-0.112836666626, --1.50695955245,-0.57160534748,-0.145157518847, --1.50695955245,-0.536962599148,-0.177598482126, --1.50695955245,-0.502319850815,-0.210144964799, --1.50695955245,-0.467677102483,-0.242800475656, --1.50695955245,-0.433034354151,-0.275529991714, --1.50695955245,-0.398391605819,-0.308343006367, --1.50695955245,-0.363748857487,-0.341217774056, --1.50695955245,-0.329106109155,-0.374151268368, --1.50695955245,-0.294463360823,-0.606213949188, --1.50695955245,-0.259820612491,-0.642186885604, --1.50695955245,-0.225177864159,-0.678040135807, --1.50695955245,-0.190535115827,-0.713928476208, --1.50695955245,-0.155892367494,-0.749762184107, --1.50695955245,-0.121249619162,-0.785618822633, --1.50695955245,-0.0866068708302,-0.821277039082, --1.50695955245,-0.0519641224981,-0.856957796476, --1.50695955245,-0.017321374166,-0.892630476193, --1.50695955245,0.017321374166,-0.928195628952, --1.50695955245,0.0519641224981,-0.963733307202, --1.50695955245,0.0866068708302,-0.999122631594, --1.50695955245,0.121249619162,-1.03449714008, --1.50695955245,0.155892367494,-0.920451409708, --1.50695955245,0.190535115827,-0.945267755686, --1.50695955245,0.225177864159,-0.972869711817, --1.50695955245,0.259820612491,-1.00165701614, --1.50695955245,0.294463360823,-1.03110811719, --1.50695955245,0.329106109155,-1.06103833984, --1.50695955245,0.363748857487,-1.27789537491, --1.50695955245,0.398391605819,-1.31143993245, --1.50695955245,0.433034354151,-1.34415102024, --1.50695955245,0.467677102483,-1.37578169328, --1.50695955245,0.502319850815,-1.40545410909, --1.50695955245,0.536962599148,-1.43208884422, --1.50695955245,0.57160534748,-1.27696268046, --1.50695955245,0.606248095812,-1.30830617623, --1.50695955245,0.640890844144,-1.33973997242, --1.50695955245,0.675533592476,-1.37122520484, --1.50695955245,0.710176340808,-1.40277859757, --1.50695955245,0.74481908914,-1.43437542375, --1.50695955245,0.779461837472,-1.46601188203, --1.50695955245,0.814104585804,-1.49768934665, --1.50695955245,0.848747334136,-1.5293943881, --1.50695955245,0.883390082469,-1.56110952051, --1.50695955245,0.918032830801,-1.59285608468, --1.50695955245,0.952675579133,-1.62462236728, --1.50695955245,0.987318327465,-1.65639170582, --1.50695955245,1.0219610758,-1.68817807413, --1.50695955245,1.05660382413,-1.71997528595, --1.50695955245,1.09124657246,-1.75175937536, --1.50695955245,1.12588932079,-1.75797671008, --1.50695955245,1.16053206913,-1.79073585169, --1.50695955245,1.19517481746,-1.82346906461, --1.50695955245,1.22981756579,-1.85615922688, --1.50695955245,1.26446031412,-1.88881501485, --1.50695955245,1.29910306245,-1.9214371146, --1.50695955245,1.33374581079,-1.95401972021, --1.50695955245,1.36838855912,-1.98656466399, --1.50695955245,1.40303130745,-2.01905719052, --1.50695955245,1.43767405578,-2.05150704491, --1.50695955245,1.47231680411,-2.08390995887, --1.50695955245,1.50695955245,-2.11627044342, --1.50695955245,1.54160230078,-2.14857631735, --1.50695955245,1.57624504911,-2.18083468273, --1.50695955245,1.61088779744,-2.213035933, --1.50695955245,1.64553054577,-2.24519497874, --1.50695955245,1.68017329411,-2.27729542024, --1.50695955245,1.71481604244,-2.30935066454, --1.47231680411,-1.71481604244,0.826634871028, --1.47231680411,-1.68017329411,0.812574596893, --1.47231680411,-1.64553054577,0.796205005005, --1.47231680411,-1.61088779744,0.777909502214, --1.47231680411,-1.57624504911,0.758038002644, --1.47231680411,-1.54160230078,0.736808885926, --1.47231680411,-1.50695955245,0.714409088535, --1.47231680411,-1.47231680411,0.690985857161, --1.47231680411,-1.43767405578,0.666659710835, --1.47231680411,-1.40303130745,0.641520740971, --1.47231680411,-1.36838855912,0.615645701388, --1.47231680411,-1.33374581079,0.589120132346, --1.47231680411,-1.29910306245,0.562001332235, --1.47231680411,-1.26446031412,0.534350816908, --1.47231680411,-1.22981756579,0.506214528244, --1.47231680411,-1.19517481746,0.477625113956, --1.47231680411,-1.16053206913,0.448647840023, --1.47231680411,-1.12588932079,0.419308962212, --1.47231680411,-1.09124657246,0.38955179138, --1.47231680411,-1.05660382413,0.359739196026, --1.47231680411,-1.0219610758,0.329664934922, --1.47231680411,-0.987318327465,0.299322925772, --1.47231680411,-0.952675579133,0.268765434473, --1.47231680411,-0.918032830801,0.237989659213, --1.47231680411,-0.883390082469,0.207018204453, --1.47231680411,-0.848747334136,0.175861836195, --1.47231680411,-0.814104585804,0.144532768381, --1.47231680411,-0.779461837472,0.113041291886, --1.47231680411,-0.74481908914,0.0813872747399, --1.47231680411,-0.710176340808,0.0495905089336, --1.47231680411,-0.675533592476,0.0176522181626, --1.47231680411,-0.640890844144,-0.0144247855809, --1.47231680411,-0.606248095812,-0.0466137300127, --1.47231680411,-0.57160534748,-0.0789423332767, --1.47231680411,-0.536962599148,-0.111366328451, --1.47231680411,-0.502319850815,-0.143891600386, --1.47231680411,-0.467677102483,-0.176517352768, --1.47231680411,-0.433034354151,-0.209241962552, --1.47231680411,-0.398391605819,-0.242042486211, --1.47231680411,-0.363748857487,-0.274916127596, --1.47231680411,-0.329106109155,-0.307853962397, --1.47231680411,-0.294463360823,-0.375491086718, --1.47231680411,-0.259820612491,-0.408112103571, --1.47231680411,-0.225177864159,-0.440791944956, --1.47231680411,-0.190535115827,-0.473514322644, --1.47231680411,-0.155892367494,-0.506280742306, --1.47231680411,-0.121249619162,-0.539101279685, --1.47231680411,-0.0866068708302,-0.571953558312, --1.47231680411,-0.0519641224981,-0.604840701529, --1.47231680411,-0.017321374166,-0.637754378249, --1.47231680411,0.017321374166,-0.670701062783, --1.47231680411,0.0519641224981,-2.57692046541, --1.47231680411,0.0866068708302,-2.46649173193, --1.47231680411,0.121249619162,-2.51648475739, --1.47231680411,0.155892367494,-1.07862341814, --1.47231680411,0.190535115827,-1.11317664374, --1.47231680411,0.225177864159,-0.838524629511, --1.47231680411,0.259820612491,-0.871959953397, --1.47231680411,0.294463360823,-0.935105254876, --1.47231680411,0.329106109155,-0.968213805426, --1.47231680411,0.363748857487,-1.00134381467, --1.47231680411,0.398391605819,-1.0344803883, --1.47231680411,0.433034354151,-1.06761727885, --1.47231680411,0.467677102483,-1.10075340986, --1.47231680411,0.502319850815,-1.13389962406, --1.47231680411,0.536962599148,-1.16703130577, --1.47231680411,0.57160534748,-1.20017316967, --1.47231680411,0.606248095812,-1.23330395778, --1.47231680411,0.640890844144,-1.26643423399, --1.47231680411,0.675533592476,-1.27449626945, --1.47231680411,0.710176340808,-1.30808002754, --1.47231680411,0.74481908914,-1.34165896123, --1.47231680411,0.779461837472,-1.37523235508, --1.47231680411,0.814104585804,-1.40879054916, --1.47231680411,0.848747334136,-1.44233099845, --1.47231680411,0.883390082469,-1.47587338474, --1.47231680411,0.918032830801,-1.50938886806, --1.47231680411,0.952675579133,-1.5428958489, --1.47231680411,0.987318327465,-1.57638392051, --1.47231680411,1.0219610758,-1.60984530838, --1.47231680411,1.05660382413,-1.64328594276, --1.47231680411,1.09124657246,-1.69593555121, --1.47231680411,1.12588932079,-1.728837975, --1.47231680411,1.16053206913,-1.76171117261, --1.47231680411,1.19517481746,-1.79454817192, --1.47231680411,1.22981756579,-1.81009609258, --1.47231680411,1.26446031412,-1.84336550775, --1.47231680411,1.29910306245,-1.87660900432, --1.47231680411,1.33374581079,-1.90980657321, --1.47231680411,1.36838855912,-1.94297101052, --1.47231680411,1.40303130745,-1.97609317247, --1.47231680411,1.43767405578,-2.00917180398, --1.47231680411,1.47231680411,-2.04220961012, --1.47231680411,1.50695955245,-2.07520162648, --1.47231680411,1.54160230078,-2.10814967749, --1.47231680411,1.57624504911,-2.14104799232, --1.47231680411,1.61088779744,-2.18610398974, --1.47231680411,1.64553054577,-2.21848228787, --1.47231680411,1.68017329411,-2.23945874541, --1.47231680411,1.71481604244,-2.27216037198, --1.43767405578,-1.71481604244,0.883915627416, --1.43767405578,-1.68017329411,0.870282154365, --1.43767405578,-1.64553054577,0.854177295211, --1.43767405578,-1.61088779744,0.836056048149, --1.43767405578,-1.57624504911,0.816282181958, --1.43767405578,-1.54160230078,0.795097545461, --1.43767405578,-1.50695955245,0.77269603764, --1.43767405578,-1.47231680411,0.749247401286, --1.43767405578,-1.43767405578,0.724874590247, --1.43767405578,-1.40303130745,0.699700077508, --1.43767405578,-1.36838855912,0.673791186335, --1.43767405578,-1.33374581079,0.647231575879, --1.43767405578,-1.29910306245,0.620097571958, --1.43767405578,-1.26446031412,0.592427650282, --1.43767405578,-1.22981756579,0.564289510957, --1.43767405578,-1.19517481746,0.53571965818, --1.43767405578,-1.16053206913,0.506750984507, --1.43767405578,-1.12588932079,0.477431737496, --1.43767405578,-1.09124657246,0.447787546647, --1.43767405578,-1.05660382413,0.417873681354, --1.43767405578,-1.0219610758,0.387873642374, --1.43767405578,-0.987318327465,0.357601892955, --1.43767405578,-0.952675579133,0.327106653915, --1.43767405578,-0.918032830801,0.296386432722, --1.43767405578,-0.883390082469,0.265460096512, --1.43767405578,-0.848747334136,0.234345995604, --1.43767405578,-0.814104585804,0.203051571553, --1.43767405578,-0.779461837472,0.171578847486, --1.43767405578,-0.74481908914,0.139954931472, --1.43767405578,-0.710176340808,0.108168766872, --1.43767405578,-0.675533592476,0.0762613037827, --1.43767405578,-0.640890844144,0.0442049494399, --1.43767405578,-0.606248095812,0.0120164777534, --1.43767405578,-0.57160534748,-0.020308918269, --1.43767405578,-0.536962599148,-0.0527594811742, --1.43767405578,-0.502319850815,-0.0853140508195, --1.43767405578,-0.467677102483,-0.117968160409, --1.43767405578,-0.433034354151,-0.150734235633, --1.43767405578,-0.398391605819,-0.183588232843, --1.43767405578,-0.363748857487,-0.216527782952, --1.43767405578,-0.329106109155,-0.249547023406, --1.43767405578,-0.294463360823,-0.282646214303, --1.43767405578,-0.259820612491,-0.315814167558, --1.43767405578,-0.225177864159,-0.349050242063, --1.43767405578,-0.190535115827,-0.399854148967, --1.43767405578,-0.155892367494,-0.433141556655, --1.43767405578,-0.121249619162,-0.466497083516, --1.43767405578,-0.0866068708302,-0.499884148635, --1.43767405578,-0.0519641224981,-0.533319563652, --1.43767405578,-0.017321374166,-0.566800134203, --1.43767405578,0.017321374166,-0.600322680868, --1.43767405578,0.0519641224981,-0.633864431513, --1.43767405578,0.0866068708302,-0.667449218296, --1.43767405578,0.121249619162,-0.701061090763, --1.43767405578,0.155892367494,-0.734708791421, --1.43767405578,0.190535115827,-0.768363353801, --1.43767405578,0.225177864159,-0.80205991276, --1.43767405578,0.259820612491,-0.835765065501, --1.43767405578,0.294463360823,-0.869487617146, --1.43767405578,0.329106109155,-0.903229836347, --1.43767405578,0.363748857487,-0.936991746972, --1.43767405578,0.398391605819,-0.970754584988, --1.43767405578,0.433034354151,-1.0045267152, --1.43767405578,0.467677102483,-1.03831899434, --1.43767405578,0.502319850815,-1.07210474089, --1.43767405578,0.536962599148,-1.10590030661, --1.43767405578,0.57160534748,-1.13968715718, --1.43767405578,0.606248095812,-1.15642722811, --1.43767405578,0.640890844144,-1.19036362508, --1.43767405578,0.675533592476,-1.22430239398, --1.43767405578,0.710176340808,-1.25824572795, --1.43767405578,0.74481908914,-1.29218753311, --1.43767405578,0.779461837472,-1.32613516897, --1.43767405578,0.814104585804,-1.36007493248, --1.43767405578,0.848747334136,-1.39401810534, --1.43767405578,0.883390082469,-1.44362479747, --1.43767405578,0.918032830801,-1.4773412887, --1.43767405578,0.952675579133,-1.51103387873, --1.43767405578,0.987318327465,-1.54470714337, --1.43767405578,1.0219610758,-1.57836541228, --1.43767405578,1.05660382413,-1.61200217659, --1.43767405578,1.09124657246,-1.64561689749, --1.43767405578,1.12588932079,-1.67920277178, --1.43767405578,1.16053206913,-1.71276289353, --1.43767405578,1.19517481746,-1.7462981422, --1.43767405578,1.22981756579,-1.76651062619, --1.43767405578,1.26446031412,-1.80025447634, --1.43767405578,1.29910306245,-1.83396665558, --1.43767405578,1.33374581079,-1.86765088804, --1.43767405578,1.36838855912,-1.90129673717, --1.43767405578,1.40303130745,-1.93490961034, --1.43767405578,1.43767405578,-1.96848757217, --1.43767405578,1.47231680411,-2.00203105362, --1.43767405578,1.50695955245,-2.03554456807, --1.43767405578,1.54160230078,-2.07983124344, --1.43767405578,1.57624504911,-2.11298026791, --1.43767405578,1.61088779744,-2.14607596167, --1.43767405578,1.64553054577,-2.17913510815, --1.43767405578,1.68017329411,-2.21214691186, --1.43767405578,1.71481604244,-2.24510962886, --1.40303130745,-1.71481604244,0.88084371903, --1.40303130745,-1.68017329411,0.867518192595, --1.40303130745,-1.64553054577,0.852054025871, --1.40303130745,-1.61088779744,0.834765136448, --1.40303130745,-1.57624504911,0.815972757018, --1.40303130745,-1.54160230078,0.795843229171, --1.40303130745,-1.50695955245,0.774514361341, --1.40303130745,-1.47231680411,0.752112856104, --1.40303130745,-1.43767405578,0.728723136937, --1.40303130745,-1.40303130745,0.704437556662, --1.40303130745,-1.36838855912,0.679333963478, --1.40303130745,-1.33374581079,0.653517880203, --1.40303130745,-1.29910306245,0.627032542715, --1.40303130745,-1.26446031412,0.599934569401, --1.40303130745,-1.22981756579,0.572303763583, --1.40303130745,-1.19517481746,0.587142071786, --1.40303130745,-1.16053206913,0.558218140061, --1.40303130745,-1.12588932079,0.528931251238, --1.40303130745,-1.09124657246,0.499308104973, --1.40303130745,-1.05660382413,0.469400583244, --1.40303130745,-1.0219610758,0.439433218463, --1.40303130745,-0.987318327465,0.40915025674, --1.40303130745,-0.952675579133,0.378623366289, --1.40303130745,-0.918032830801,0.347887532305, --1.40303130745,-0.883390082469,0.316924763886, --1.40303130745,-0.848747334136,0.285775206756, --1.40303130745,-0.814104585804,0.254433620242, --1.40303130745,-0.779461837472,0.222923399195, --1.40303130745,-0.74481908914,0.191247804039, --1.40303130745,-0.710176340808,0.159411461366, --1.40303130745,-0.675533592476,0.127428724318, --1.40303130745,-0.640890844144,0.0953122589942, --1.40303130745,-0.606248095812,0.063058209508, --1.40303130745,-0.57160534748,0.0306764268649, --1.40303130745,-0.536962599148,-0.00181445577806, --1.40303130745,-0.502319850815,-0.0344311943237, --1.40303130745,-0.467677102483,-0.0671527025769, --1.40303130745,-0.433034354151,-0.099955710859, --1.40303130745,-0.398391605819,-0.132871939671, --1.40303130745,-0.363748857487,-0.165870836772, --1.40303130745,-0.329106109155,-0.198958427874, --1.40303130745,-0.294463360823,-0.232117684603, --1.40303130745,-0.259820612491,-0.265354037254, --1.40303130745,-0.225177864159,-0.298663832963, --1.40303130745,-0.190535115827,-0.332034776283, --1.40303130745,-0.155892367494,-0.375972212004, --1.40303130745,-0.121249619162,-0.409528131242, --1.40303130745,-0.0866068708302,-0.443135440827, --1.40303130745,-0.0519641224981,-0.476794827626, --1.40303130745,-0.017321374166,-0.510508349573, --1.40303130745,0.017321374166,-0.544259973379, --1.40303130745,0.0519641224981,-0.578051004415, --1.40303130745,0.0866068708302,-0.611883134582, --1.40303130745,0.121249619162,-0.645748346979, --1.40303130745,0.155892367494,-0.679652119771, --1.40303130745,0.190535115827,-0.713590958339, --1.40303130745,0.225177864159,-0.747549030197, --1.40303130745,0.259820612491,-0.781546281231, --1.40303130745,0.294463360823,-0.815552566382, --1.40303130745,0.329106109155,-0.84959079731, --1.40303130745,0.363748857487,-0.883653472179, --1.40303130745,0.398391605819,-0.917730204316, --1.40303130745,0.433034354151,-0.951824023646, --1.40303130745,0.467677102483,-0.985927215037, --1.40303130745,0.502319850815,-1.02006334957, --1.40303130745,0.536962599148,-1.0541856299, --1.40303130745,0.57160534748,-1.08832541373, --1.40303130745,0.606248095812,-1.12247433502, --1.40303130745,0.640890844144,-1.15662906892, --1.40303130745,0.675533592476,-1.19078323601, --1.40303130745,0.710176340808,-1.22493992894, --1.40303130745,0.74481908914,-1.25909600438, --1.40303130745,0.779461837472,-1.2932531558, --1.40303130745,0.814104585804,-1.32739562168, --1.40303130745,0.848747334136,-1.36154909586, --1.40303130745,0.883390082469,-1.39568247871, --1.40303130745,0.918032830801,-1.42980422104, --1.40303130745,0.952675579133,-1.46392586154, --1.40303130745,0.987318327465,-1.49803513463, --1.40303130745,1.0219610758,-1.53212507397, --1.40303130745,1.05660382413,-1.56620258355, --1.40303130745,1.09124657246,-1.60026352793, --1.40303130745,1.12588932079,-1.63430509423, --1.40303130745,1.16053206913,-1.66832792139, --1.40303130745,1.19517481746,-1.70232465913, --1.40303130745,1.22981756579,-1.73629917729, --1.40303130745,1.26446031412,-1.77024936526, --1.40303130745,1.29910306245,-1.80416978937, --1.40303130745,1.33374581079,-1.83806867846, --1.40303130745,1.36838855912,-1.87192934394, --1.40303130745,1.40303130745,-1.90576538581, --1.40303130745,1.43767405578,-1.93956821023, --1.40303130745,1.47231680411,-1.97334279311, --1.40303130745,1.50695955245,-2.00707304111, --1.40303130745,1.54160230078,-2.04077172625, --1.40303130745,1.57624504911,-2.07443076865, --1.40303130745,1.61088779744,-2.10804615003, --1.40303130745,1.64553054577,-2.14162242578, --1.40303130745,1.68017329411,-2.17516353106, --1.40303130745,1.71481604244,-2.20865123664, --1.36838855912,-1.71481604244,0.919767415709, --1.36838855912,-1.68017329411,0.906655691667, --1.36838855912,-1.64553054577,0.891297266715, --1.36838855912,-1.61088779744,0.874105884204, --1.36838855912,-1.57624504911,0.855320682927, --1.36838855912,-1.54160230078,0.835163216163, --1.36838855912,-1.50695955245,0.81377504565, --1.36838855912,-1.47231680411,0.791341825291, --1.36838855912,-1.43767405578,0.767902180343, --1.36838855912,-1.40303130745,0.743561355756, --1.36838855912,-1.36838855912,0.718412326873, --1.36838855912,-1.33374581079,0.692545416838, --1.36838855912,-1.29910306245,0.666000517221, --1.36838855912,-1.26446031412,0.638859258969, --1.36838855912,-1.22981756579,0.612072221186, --1.36838855912,-1.19517481746,0.632314624852, --1.36838855912,-1.16053206913,0.603430480547, --1.36838855912,-1.12588932079,0.574179269366, --1.36838855912,-1.09124657246,0.544600245832, --1.36838855912,-1.05660382413,0.514720573439, --1.36838855912,-1.0219610758,0.484550687924, --1.36838855912,-0.987318327465,0.454656410812, --1.36838855912,-0.952675579133,0.424121839158, --1.36838855912,-0.918032830801,0.393350837173, --1.36838855912,-0.883390082469,0.362383791936, --1.36838855912,-0.848747334136,0.331202857935, --1.36838855912,-0.814104585804,0.299834558277, --1.36838855912,-0.779461837472,0.268291102358, --1.36838855912,-0.74481908914,0.236582564552, --1.36838855912,-0.710176340808,0.204710681905, --1.36838855912,-0.675533592476,0.172695069998, --1.36838855912,-0.640890844144,0.140531571587, --1.36838855912,-0.606248095812,0.108234510133, --1.36838855912,-0.57160534748,0.0758130400592, --1.36838855912,-0.536962599148,0.043268585891, --1.36838855912,-0.502319850815,0.0106093199632, --1.36838855912,-0.467677102483,-0.0221534460209, --1.36838855912,-0.433034354151,-0.0550327987429, --1.36838855912,-0.398391605819,-0.0880016591362, --1.36838855912,-0.363748857487,-0.121055023302, --1.36838855912,-0.329106109155,-0.154208166213, --1.36838855912,-0.294463360823,-0.187437849013, --1.36838855912,-0.259820612491,-0.220749037538, --1.36838855912,-0.225177864159,-0.254131111255, --1.36838855912,-0.190535115827,-0.28758633237, --1.36838855912,-0.155892367494,-0.321102987729, --1.36838855912,-0.121249619162,-0.361218618169, --1.36838855912,-0.0866068708302,-0.394956040178, --1.36838855912,-0.0519641224981,-0.428736816229, --1.36838855912,-0.017321374166,-0.462567986644, --1.36838855912,0.017321374166,-0.496447235136, --1.36838855912,0.0519641224981,-0.530384796019, --1.36838855912,0.0866068708302,-0.564362365924, --1.36838855912,0.121249619162,-0.598383362177, --1.36838855912,0.155892367494,-0.632422711456, --1.36838855912,0.190535115827,-0.666511301027, --1.36838855912,0.225177864159,-0.700637751487, --1.36838855912,0.259820612491,-0.73479282553, --1.36838855912,0.294463360823,-0.768977435591, --1.36838855912,0.329106109155,-0.80319702545, --1.36838855912,0.363748857487,-0.83743150412, --1.36838855912,0.398391605819,-0.871697098203, --1.36838855912,0.433034354151,-0.905984129105, --1.36838855912,0.467677102483,-0.940280672502, --1.36838855912,0.502319850815,-0.97460776608, --1.36838855912,0.536962599148,-1.00895319069, --1.36838855912,0.57160534748,-1.04329610425, --1.36838855912,0.606248095812,-1.07766977289, --1.36838855912,0.640890844144,-1.11204384762, --1.36838855912,0.675533592476,-1.1464288315, --1.36838855912,0.710176340808,-1.180824056, --1.36838855912,0.74481908914,-1.2152254974, --1.36838855912,0.779461837472,-1.24962348936, --1.36838855912,0.814104585804,-1.28403035429, --1.36838855912,0.848747334136,-1.31843345114, --1.36838855912,0.883390082469,-1.35284461879, --1.36838855912,0.918032830801,-1.38724571005, --1.36838855912,0.952675579133,-1.4216483911, --1.36838855912,0.987318327465,-1.45603098658, --1.36838855912,1.0219610758,-1.49041788117, --1.36838855912,1.05660382413,-1.52479173674, --1.36838855912,1.09124657246,-1.55916416598, --1.36838855912,1.12588932079,-1.59351481768, --1.36838855912,1.16053206913,-1.62785093757, --1.36838855912,1.19517481746,-1.66217384032, --1.36838855912,1.22981756579,-1.69648301183, --1.36838855912,1.26446031412,-1.73077115759, --1.36838855912,1.29910306245,-1.76503545283, --1.36838855912,1.33374581079,-1.79928370781, --1.36838855912,1.36838855912,-1.83350063081, --1.36838855912,1.40303130745,-1.86770190206, --1.36838855912,1.43767405578,-1.90186354762, --1.36838855912,1.47231680411,-1.93600708942, --1.36838855912,1.50695955245,-1.97012127745, --1.36838855912,1.54160230078,-2.00420000479, --1.36838855912,1.57624504911,-2.03825249283, --1.36838855912,1.61088779744,-2.0722643195, --1.36838855912,1.64553054577,-2.1062445788, --1.36838855912,1.68017329411,-2.14018546985, --1.36838855912,1.71481604244,-2.17408785493, --1.33374581079,-1.71481604244,0.953622543919, --1.33374581079,-1.68017329411,0.940602912866, --1.33374581079,-1.64553054577,0.925292011626, --1.33374581079,-1.61088779744,0.908071618128, --1.33374581079,-1.57624504911,0.889251767808, --1.33374581079,-1.54160230078,0.869024103569, --1.33374581079,-1.50695955245,0.847583796998, --1.33374581079,-1.47231680411,0.825021218776, --1.33374581079,-1.43767405578,0.801496898094, --1.33374581079,-1.40303130745,0.777059411268, --1.33374581079,-1.36838855912,0.751835624121, --1.33374581079,-1.33374581079,0.725885499372, --1.33374581079,-1.29910306245,0.699269746905, --1.33374581079,-1.26446031412,0.672053922079, --1.33374581079,-1.22981756579,0.649438491009, --1.33374581079,-1.19517481746,0.672483166915, --1.33374581079,-1.16053206913,0.643641249738, --1.33374581079,-1.12588932079,0.614438558736, --1.33374581079,-1.09124657246,0.584899845569, --1.33374581079,-1.05660382413,0.555056826669, --1.33374581079,-1.0219610758,0.524930121769, --1.33374581079,-0.987318327465,0.494545858062, --1.33374581079,-0.952675579133,0.464191382483, --1.33374581079,-0.918032830801,0.43345390119, --1.33374581079,-0.883390082469,0.402499240181, --1.33374581079,-0.848747334136,0.371344686056, --1.33374581079,-0.814104585804,0.340002755904, --1.33374581079,-0.779461837472,0.308476225501, --1.33374581079,-0.74481908914,0.276770527725, --1.33374581079,-0.710176340808,0.244909690548, --1.33374581079,-0.675533592476,0.212886977312, --1.33374581079,-0.640890844144,0.180717669855, --1.33374581079,-0.606248095812,0.148412422041, --1.33374581079,-0.57160534748,0.115967103158, --1.33374581079,-0.536962599148,0.0834032701654, --1.33374581079,-0.502319850815,0.0507205106341, --1.33374581079,-0.467677102483,0.0179229381035, --1.33374581079,-0.433034354151,-0.0149836269834, --1.33374581079,-0.398391605819,-0.047990702504, --1.33374581079,-0.363748857487,-0.0810896712776, --1.33374581079,-0.329106109155,-0.114281929174, --1.33374581079,-0.294463360823,-0.147565556223, --1.33374581079,-0.259820612491,-0.180921664101, --1.33374581079,-0.225177864159,-0.214363105602, --1.33374581079,-0.190535115827,-0.247872097727, --1.33374581079,-0.155892367494,-0.281458352141, --1.33374581079,-0.121249619162,-0.315099372744, --1.33374581079,-0.0866068708302,-0.352644419924, --1.33374581079,-0.0519641224981,-0.386513394953, --1.33374581079,-0.017321374166,-0.420423130805, --1.33374581079,0.017321374166,-0.454393710745, --1.33374581079,0.0519641224981,-0.488412956199, --1.33374581079,0.0866068708302,-0.522483000039, --1.33374581079,0.121249619162,-0.556584589002, --1.33374581079,0.155892367494,-0.590731314322, --1.33374581079,0.190535115827,-0.624925733921, --1.33374581079,0.225177864159,-0.659157546807, --1.33374581079,0.259820612491,-0.693420305721, --1.33374581079,0.294463360823,-0.727716086703, --1.33374581079,0.329106109155,-0.762047200583, --1.33374581079,0.363748857487,-0.79640077236, --1.33374581079,0.398391605819,-0.830791171063, --1.33374581079,0.433034354151,-0.865205009485, --1.33374581079,0.467677102483,-0.899640539693, --1.33374581079,0.502319850815,-0.934091962927, --1.33374581079,0.536962599148,-0.968576559345, --1.33374581079,0.57160534748,-1.00307244092, --1.33374581079,0.606248095812,-1.03758625633, --1.33374581079,0.640890844144,-1.07212490851, --1.33374581079,0.675533592476,-1.10665695027, --1.33374581079,0.710176340808,-1.14121268039, --1.33374581079,0.74481908914,-1.17578151484, --1.33374581079,0.779461837472,-1.21035389146, --1.33374581079,0.814104585804,-1.24493463511, --1.33374581079,0.848747334136,-1.27952115726, --1.33374581079,0.883390082469,-1.31410997664, --1.33374581079,0.918032830801,-1.34870750869, --1.33374581079,0.952675579133,-1.38330510553, --1.33374581079,0.987318327465,-1.41790662859, --1.33374581079,1.0219610758,-1.45249848407, --1.33374581079,1.05660382413,-1.48708053075, --1.33374581079,1.09124657246,-1.52165686166, --1.33374581079,1.12588932079,-1.55624225518, --1.33374581079,1.16053206913,-1.59080667332, --1.33374581079,1.19517481746,-1.62536524746, --1.33374581079,1.22981756579,-1.65991292129, --1.33374581079,1.26446031412,-1.69444521009, --1.33374581079,1.29910306245,-1.72896662515, --1.33374581079,1.33374581079,-1.76347326854, --1.33374581079,1.36838855912,-1.79795554091, --1.33374581079,1.40303130745,-1.83242596167, --1.33374581079,1.43767405578,-1.86686688874, --1.33374581079,1.47231680411,-1.90128469457, --1.33374581079,1.50695955245,-1.93569291733, --1.33374581079,1.54160230078,-1.97007055272, --1.33374581079,1.57624504911,-2.00442018421, --1.33374581079,1.61088779744,-2.03873106925, --1.33374581079,1.64553054577,-2.0730213509, --1.33374581079,1.68017329411,-2.10727636347, --1.33374581079,1.71481604244,-2.14150425859, --1.29910306245,-1.71481604244,0.984633091389, --1.29910306245,-1.68017329411,0.971702903201, --1.29910306245,-1.64553054577,0.956420856934, --1.29910306245,-1.61088779744,0.939179369758, --1.29910306245,-1.57624504911,0.920312544829, --1.29910306245,-1.54160230078,0.900050472234, --1.29910306245,-1.50695955245,0.878528924168, --1.29910306245,-1.47231680411,0.855934843444, --1.29910306245,-1.43767405578,0.832343302439, --1.29910306245,-1.40303130745,0.807890089405, --1.29910306245,-1.36838855912,0.782593221854, --1.29910306245,-1.33374581079,0.756597894368, --1.29910306245,-1.29910306245,0.729957443694, --1.29910306245,-1.26446031412,0.702709379273, --1.29910306245,-1.22981756579,0.683738554176, --1.29910306245,-1.19517481746,0.70841772122, --1.29910306245,-1.16053206913,0.679566118451, --1.29910306245,-1.12588932079,0.650359928726, --1.29910306245,-1.09124657246,0.620819010967, --1.29910306245,-1.05660382413,0.590974122808, --1.29910306245,-1.0219610758,0.560850691133, --1.29910306245,-0.987318327465,0.530471133724, --1.29910306245,-0.952675579133,0.500044908855, --1.29910306245,-0.918032830801,0.469189122906, --1.29910306245,-0.883390082469,0.438133988876, --1.29910306245,-0.848747334136,0.406875222364, --1.29910306245,-0.814104585804,0.375401056625, --1.29910306245,-0.779461837472,0.343609486049, --1.29910306245,-0.74481908914,0.311660627047, --1.29910306245,-0.710176340808,0.279705615302, --1.29910306245,-0.675533592476,0.247611096349, --1.29910306245,-0.640890844144,0.215378760185, --1.29910306245,-0.606248095812,0.183007633356, --1.29910306245,-0.57160534748,0.150509185327, --1.29910306245,-0.536962599148,0.117890650018, --1.29910306245,-0.502319850815,0.0851585045285, --1.29910306245,-0.467677102483,0.0523093297336, --1.29910306245,-0.433034354151,0.0193637921803, --1.29910306245,-0.398391605819,-0.0136820516903, --1.29910306245,-0.363748857487,-0.0468190387604, --1.29910306245,-0.329106109155,-0.0800434057098, --1.29910306245,-0.294463360823,-0.113352923183, --1.29910306245,-0.259820612491,-0.146752689581, --1.29910306245,-0.225177864159,-0.180216462449, --1.29910306245,-0.190535115827,-0.213756785914, --1.29910306245,-0.155892367494,-0.247360569406, --1.29910306245,-0.121249619162,-0.281034049894, --1.29910306245,-0.0866068708302,-0.314766983142, --1.29910306245,-0.0519641224981,-0.348685768943, --1.29910306245,-0.017321374166,-0.382662400732, --1.29910306245,0.017321374166,-0.416688895728, --1.29910306245,0.0519641224981,-0.450765522894, --1.29910306245,0.0866068708302,-0.484896070016, --1.29910306245,0.121249619162,-0.519079291784, --1.29910306245,0.155892367494,-0.553295871727, --1.29910306245,0.190535115827,-0.58754617329, --1.29910306245,0.225177864159,-0.621853543078, --1.29910306245,0.259820612491,-0.656193179377, --1.29910306245,0.294463360823,-0.69056812429, --1.29910306245,0.329106109155,-0.724974970802, --1.29910306245,0.363748857487,-0.759416009156, --1.29910306245,0.398391605819,-0.793889967361, --1.29910306245,0.433034354151,-0.828394704172, --1.29910306245,0.467677102483,-0.86292098975, --1.29910306245,0.502319850815,-0.897472747313, --1.29910306245,0.536962599148,-0.932050121188, --1.29910306245,0.57160534748,-0.966649328507, --1.29910306245,0.606248095812,-1.00127269994, --1.29910306245,0.640890844144,-1.03590925399, --1.29910306245,0.675533592476,-1.0705578272, --1.29910306245,0.710176340808,-1.10523669294, --1.29910306245,0.74481908914,-1.13992089052, --1.29910306245,0.779461837472,-1.17461795735, --1.29910306245,0.814104585804,-1.2093315507, --1.29910306245,0.848747334136,-1.24404740566, --1.29910306245,0.883390082469,-1.27877648423, --1.29910306245,0.918032830801,-1.31350548038, --1.29910306245,0.952675579133,-1.34824250073, --1.29910306245,0.987318327465,-1.38298716076, --1.29910306245,1.0219610758,-1.41772910405, --1.29910306245,1.05660382413,-1.45248531943, --1.29910306245,1.09124657246,-1.48722109978, --1.29910306245,1.12588932079,-1.52197188603, --1.29910306245,1.16053206913,-1.55670614812, --1.29910306245,1.19517481746,-1.59143787121, --1.29910306245,1.22981756579,-1.62616665858, --1.29910306245,1.26446031412,-1.66088563424, --1.29910306245,1.29910306245,-1.69559468326, --1.29910306245,1.33374581079,-1.73029390322, --1.29910306245,1.36838855912,-1.76498011152, --1.29910306245,1.40303130745,-1.79965540818, --1.29910306245,1.43767405578,-1.834312551, --1.29910306245,1.47231680411,-1.86895063813, --1.29910306245,1.50695955245,-1.9035735487, --1.29910306245,1.54160230078,-1.93817669065, --1.29910306245,1.57624504911,-1.97275947261, --1.29910306245,1.61088779744,-2.00731261571, --1.29910306245,1.64553054577,-2.04184556896, --1.29910306245,1.68017329411,-2.0763520137, --1.29910306245,1.71481604244,-2.11083303372, --1.26446031412,-1.71481604244,1.01338308702, --1.26446031412,-1.68017329411,1.00052402269, --1.26446031412,-1.64553054577,0.985274258896, --1.26446031412,-1.61088779744,0.968036343921, --1.26446031412,-1.57624504911,0.94913889978, --1.26446031412,-1.54160230078,0.928830549896, --1.26446031412,-1.50695955245,0.907283633266, --1.26446031412,-1.47231680411,0.884617968292, --1.26446031412,-1.43767405578,0.860986629456, --1.26446031412,-1.40303130745,0.836484532034, --1.26446031412,-1.36838855912,0.811180573872, --1.26446031412,-1.33374581079,0.785149755709, --1.26446031412,-1.29910306245,0.758471434445, --1.26446031412,-1.26446031412,0.73122301994, --1.26446031412,-1.22981756579,0.715428548676, --1.26446031412,-1.19517481746,0.698809285805, --1.26446031412,-1.16053206913,0.679790876804, --1.26446031412,-1.12588932079,0.658798178566, --1.26446031412,-1.09124657246,0.636140266099, --1.26446031412,-1.05660382413,0.61208715913, --1.26446031412,-1.0219610758,0.586826490651, --1.26446031412,-0.987318327465,0.563904674357, --1.26446031412,-0.952675579133,0.533369481568, --1.26446031412,-0.918032830801,0.502931519544, --1.26446031412,-0.883390082469,0.471861404803, --1.26446031412,-0.848747334136,0.440608209586, --1.26446031412,-0.814104585804,0.40915025674, --1.26446031412,-0.779461837472,0.377518000296, --1.26446031412,-0.74481908914,0.34571348931, --1.26446031412,-0.710176340808,0.313746714213, --1.26446031412,-0.675533592476,0.281635610652, --1.26446031412,-0.640890844144,0.249376355624, --1.26446031412,-0.606248095812,0.216982325401, --1.26446031412,-0.57160534748,0.184461229488, --1.26446031412,-0.536962599148,0.151814761009, --1.26446031412,-0.502319850815,0.119055341601, --1.26446031412,-0.467677102483,0.0861804145544, --1.26446031412,-0.433034354151,0.0532049485614, --1.26446031412,-0.398391605819,0.0200388574459, --1.26446031412,-0.363748857487,-0.0132572964569, --1.26446031412,-0.329106109155,-0.0465880810306, --1.26446031412,-0.294463360823,-0.0799375638476, --1.26446031412,-0.259820612491,-0.113352923183, --1.26446031412,-0.225177864159,-0.146849388832, --1.26446031412,-0.190535115827,-0.180422306571, --1.26446031412,-0.155892367494,-0.214064112781, --1.26446031412,-0.121249619162,-0.247771764112, --1.26446031412,-0.0866068708302,-0.281544136411, --1.26446031412,-0.0519641224981,-0.315205466706, --1.26446031412,-0.017321374166,-0.348907791762, --1.26446031412,0.017321374166,-0.382877804174, --1.26446031412,0.0519641224981,-0.416903851691, --1.26446031412,0.0866068708302,-0.450982146753, --1.26446031412,0.121249619162,-0.485107824816, --1.26446031412,0.155892367494,-0.519277159666, --1.26446031412,0.190535115827,-0.553530135419, --1.26446031412,0.225177864159,-0.587897616963, --1.26446031412,0.259820612491,-0.622283007217, --1.26446031412,0.294463360823,-0.656714998573, --1.26446031412,0.329106109155,-0.691186501296, --1.26446031412,0.363748857487,-0.725689655828, --1.26446031412,0.398391605819,-0.760224307896, --1.26446031412,0.433034354151,-0.794791923041, --1.26446031412,0.467677102483,-0.829391314998, --1.26446031412,0.502319850815,-0.864016421106, --1.26446031412,0.536962599148,-0.898669450973, --1.26446031412,0.57160534748,-0.933337846406, --1.26446031412,0.606248095812,-0.968032671556, --1.26446031412,0.640890844144,-1.00275704706, --1.26446031412,0.675533592476,-1.03750122584, --1.26446031412,0.710176340808,-1.0722459564, --1.26446031412,0.74481908914,-1.10703034413, --1.26446031412,0.779461837472,-1.14182042958, --1.26446031412,0.814104585804,-1.17662397052, --1.26446031412,0.848747334136,-1.21144154648, --1.26446031412,0.883390082469,-1.24627280153, --1.26446031412,0.918032830801,-1.28110919391, --1.26446031412,0.952675579133,-1.31596120796, --1.26446031412,0.987318327465,-1.35080935741, --1.26446031412,1.0219610758,-1.38567730915, --1.26446031412,1.05660382413,-1.42054333248, --1.26446031412,1.09124657246,-1.45540232924, --1.26446031412,1.12588932079,-1.49027507905, --1.26446031412,1.16053206913,-1.52514934638, --1.26446031412,1.19517481746,-1.56001701792, --1.26446031412,1.22981756579,-1.59488390478, --1.26446031412,1.26446031412,-1.62974487643, --1.26446031412,1.29910306245,-1.66459886325, --1.26446031412,1.33374581079,-1.69945176576, --1.26446031412,1.36838855912,-1.73429168364, --1.26446031412,1.40303130745,-1.76912927222, --1.26446031412,1.43767405578,-1.8039535887, --1.26446031412,1.47231680411,-1.83875754165, --1.26446031412,1.50695955245,-1.87355076656, --1.26446031412,1.54160230078,-1.90834244966, --1.26446031412,1.57624504911,-1.94310417335, --1.26446031412,1.61088779744,-1.97784227927, --1.26446031412,1.64553054577,-2.01256858893, --1.26446031412,1.68017329411,-2.04727456963, --1.26446031412,1.71481604244,-2.08195719784, --1.22981756579,-1.71481604244,1.04018618834, --1.22981756579,-1.68017329411,1.02739743458, --1.22981756579,-1.64553054577,1.01213395726, --1.22981756579,-1.61088779744,0.994882382346, --1.22981756579,-1.57624504911,0.975967366287, --1.22981756579,-1.54160230078,0.955617431087, --1.22981756579,-1.50695955245,0.934045543721, --1.22981756579,-1.47231680411,0.911352666756, --1.22981756579,-1.43767405578,0.887672014598, --1.22981756579,-1.40303130745,0.863134357098, --1.22981756579,-1.36838855912,0.837813648712, --1.22981756579,-1.33374581079,0.811757932577, --1.22981756579,-1.29910306245,0.785064913795, --1.22981756579,-1.26446031412,0.75849320266, --1.22981756579,-1.22981756579,0.744869240729, --1.22981756579,-1.19517481746,0.728285699013, --1.22981756579,-1.16053206913,0.70929203362, --1.22981756579,-1.12588932079,0.688319752293, --1.22981756579,-1.09124657246,0.665672026371, --1.22981756579,-1.05660382413,0.641632674796, --1.22981756579,-1.0219610758,0.616378252235, --1.22981756579,-0.987318327465,0.590099198002, --1.22981756579,-0.952675579133,0.562929857417, --1.22981756579,-0.918032830801,0.534087640837, --1.22981756579,-0.883390082469,0.503016803974, --1.22981756579,-0.848747334136,0.471752003616, --1.22981756579,-0.814104585804,0.440294769286, --1.22981756579,-0.779461837472,0.40866198389, --1.22981756579,-0.74481908914,0.376851876534, --1.22981756579,-0.710176340808,0.344878226159, --1.22981756579,-0.675533592476,0.312755393081, --1.22981756579,-0.640890844144,0.28049157351, --1.22981756579,-0.606248095812,0.2480883336, --1.22981756579,-0.57160534748,0.21555482411, --1.22981756579,-0.536962599148,0.182900156437, --1.22981756579,-0.502319850815,0.150125588383, --1.22981756579,-0.467677102483,0.117240061385, --1.22981756579,-0.433034354151,0.084252521974, --1.22981756579,-0.398391605819,0.0511565008776, --1.22981756579,-0.363748857487,0.0179695774437, --1.22981756579,-0.329106109155,-0.015313078179, --1.22981756579,-0.294463360823,-0.0486762331721, --1.22981756579,-0.259820612491,-0.0821260829001, --1.22981756579,-0.225177864159,-0.115665438519, --1.22981756579,-0.190535115827,-0.149271341331, --1.22981756579,-0.155892367494,-0.18294907053, --1.22981756579,-0.121249619162,-0.216696855626, --1.22981756579,-0.0866068708302,-0.250589522864, --1.22981756579,-0.0519641224981,-0.284482609399, --1.22981756579,-0.017321374166,-0.318086299023, --1.22981756579,0.017321374166,-0.352099768122, --1.22981756579,0.0519641224981,-0.386164000015, --1.22981756579,0.0866068708302,-0.420285392246, --1.22981756579,0.121249619162,-0.454451219075, --1.22981756579,0.155892367494,-0.488662459221, --1.22981756579,0.190535115827,-0.522925946274, --1.22981756579,0.225177864159,-0.557220135962, --1.22981756579,0.259820612491,-0.591559041295, --1.22981756579,0.294463360823,-0.625955018214, --1.22981756579,0.329106109155,-0.660379356863, --1.22981756579,0.363748857487,-0.694839622947, --1.22981756579,0.398391605819,-0.729334832773, --1.22981756579,0.433034354151,-0.763868991658, --1.22981756579,0.467677102483,-0.798513637976, --1.22981756579,0.502319850815,-0.833191472195, --1.22981756579,0.536962599148,-0.867897720106, --1.22981756579,0.57160534748,-0.902625733346, --1.22981756579,0.606248095812,-0.937385688077, --1.22981756579,0.640890844144,-0.972166321284, --1.22981756579,0.675533592476,-1.00696905305, --1.22981756579,0.710176340808,-1.04179704761, --1.22981756579,0.74481908914,-1.07664220944, --1.22981756579,0.779461837472,-1.1115043047, --1.22981756579,0.814104585804,-1.14638519226, --1.22981756579,0.848747334136,-1.18127963933, --1.22981756579,0.883390082469,-1.21618364926, --1.22981756579,0.918032830801,-1.25110518073, --1.22981756579,0.952675579133,-1.28604198553, --1.22981756579,0.987318327465,-1.3209774988, --1.22981756579,1.0219610758,-1.35592816072, --1.22981756579,1.05660382413,-1.39088517652, --1.22981756579,1.09124657246,-1.42585261625, --1.22981756579,1.12588932079,-1.46081595221, --1.22981756579,1.16053206913,-1.4957898332, --1.22981756579,1.19517481746,-1.53076481737, --1.22981756579,1.22981756579,-1.56574638934, --1.22981756579,1.26446031412,-1.60071970718, --1.22981756579,1.29910306245,-1.63569437736, --1.22981756579,1.33374581079,-1.67066204096, --1.22981756579,1.36838855912,-1.70562844614, --1.22981756579,1.40303130745,-1.74058728483, --1.22981756579,1.43767405578,-1.77554260074, --1.22981756579,1.47231680411,-1.81048817246, --1.22981756579,1.50695955245,-1.84542118351, --1.22981756579,1.54160230078,-1.88034301222, --1.22981756579,1.57624504911,-1.91525443559, --1.22981756579,1.61088779744,-1.95015200025, --1.22981756579,1.64553054577,-1.98503001645, --1.22981756579,1.68017329411,-2.01989846382, --1.22981756579,1.71481604244,-2.05474618565, --1.19517481746,-1.71481604244,1.06525138349, --1.19517481746,-1.68017329411,1.05249410194, --1.19517481746,-1.64553054577,1.0372657392, --1.19517481746,-1.61088779744,1.02000919926, --1.19517481746,-1.57624504911,1.00107306858, --1.19517481746,-1.54160230078,0.980686335047, --1.19517481746,-1.50695955245,0.95907318283, --1.19517481746,-1.47231680411,0.936352249217, --1.19517481746,-1.43767405578,0.912657146811, --1.19517481746,-1.40303130745,0.888068108324, --1.19517481746,-1.36838855912,0.862729771325, --1.19517481746,-1.33374581079,0.836649092714, --1.19517481746,-1.29910306245,0.809945854852, --1.19517481746,-1.26446031412,0.785939202163, --1.19517481746,-1.22981756579,0.772352996698, --1.19517481746,-1.19517481746,0.755795570859, --1.19517481746,-1.16053206913,0.736825034642, --1.19517481746,-1.12588932079,0.715864748591, --1.19517481746,-1.09124657246,0.693230644072, --1.19517481746,-1.05660382413,0.669200138153, --1.19517481746,-1.0219610758,0.643952103212, --1.19517481746,-0.987318327465,0.61767568004, --1.19517481746,-0.952675579133,0.590503904673, --1.19517481746,-0.918032830801,0.562561500174, --1.19517481746,-0.883390082469,0.53192548652, --1.19517481746,-0.848747334136,0.500658311092, --1.19517481746,-0.814104585804,0.469199197448, --1.19517481746,-0.779461837472,0.437557795654, --1.19517481746,-0.74481908914,0.405748725352, --1.19517481746,-0.710176340808,0.373778556545, --1.19517481746,-0.675533592476,0.34165357244, --1.19517481746,-0.640890844144,0.309371226727, --1.19517481746,-0.606248095812,0.27696042093, --1.19517481746,-0.57160534748,0.244424903555, --1.19517481746,-0.536962599148,0.211756861074, --1.19517481746,-0.502319850815,0.178975685801, --1.19517481746,-0.467677102483,0.146075700266, --1.19517481746,-0.433034354151,0.113076303001, --1.19517481746,-0.398391605819,0.079970238164, --1.19517481746,-0.363748857487,0.0467700106147, --1.19517481746,-0.329106109155,0.0134711611778, --1.19517481746,-0.294463360823,-0.0199037903493, --1.19517481746,-0.259820612491,-0.0533685151525, --1.19517481746,-0.225177864159,-0.0869192078055, --1.19517481746,-0.190535115827,-0.120555739865, --1.19517481746,-0.155892367494,-0.154245235967, --1.19517481746,-0.121249619162,-0.1880140485, --1.19517481746,-0.0866068708302,-0.221850945954, --1.19517481746,-0.0519641224981,-0.255754408579, --1.19517481746,-0.017321374166,-0.289714804443, --1.19517481746,0.017321374166,-0.323490780162, --1.19517481746,0.0519641224981,-0.357589484176, --1.19517481746,0.0866068708302,-0.39173639776, --1.19517481746,0.121249619162,-0.425935868479, --1.19517481746,0.155892367494,-0.460187388449, --1.19517481746,0.190535115827,-0.494475760287, --1.19517481746,0.225177864159,-0.528815572205, --1.19517481746,0.259820612491,-0.563195355333, --1.19517481746,0.294463360823,-0.597624452235, --1.19517481746,0.329106109155,-0.632086322065, --1.19517481746,0.363748857487,-0.666587703279, --1.19517481746,0.398391605819,-0.701122564579, --1.19517481746,0.433034354151,-0.735696479916, --1.19517481746,0.467677102483,-0.770306774411, --1.19517481746,0.502319850815,-0.804944439268, --1.19517481746,0.536962599148,-0.839610866336, --1.19517481746,0.57160534748,-0.874310698962, --1.19517481746,0.606248095812,-0.909037850419, --1.19517481746,0.640890844144,-0.943795120304, --1.19517481746,0.675533592476,-0.978624597326, --1.19517481746,0.710176340808,-1.01350867213, --1.19517481746,0.74481908914,-1.04839847035, --1.19517481746,0.779461837472,-1.08331939089, --1.19517481746,0.814104585804,-1.1182577918, --1.19517481746,0.848747334136,-1.15320976264, --1.19517481746,0.883390082469,-1.18817837777, --1.19517481746,0.918032830801,-1.22316495623, --1.19517481746,0.952675579133,-1.25816493491, --1.19517481746,0.987318327465,-1.29317513956, --1.19517481746,1.0219610758,-1.32819988207, --1.19517481746,1.05660382413,-1.36322891918, --1.19517481746,1.09124657246,-1.39827545801, --1.19517481746,1.12588932079,-1.43331871672, --1.19517481746,1.16053206913,-1.46837569944, --1.19517481746,1.19517481746,-1.50342934402, --1.19517481746,1.22981756579,-1.53850254593, --1.19517481746,1.26446031412,-1.57356110668, --1.19517481746,1.29910306245,-1.60862750437, --1.19517481746,1.33374581079,-1.64369454994, --1.19517481746,1.36838855912,-1.67876025033, --1.19517481746,1.40303130745,-1.71382064972, --1.19517481746,1.43767405578,-1.74888255554, --1.19517481746,1.47231680411,-1.78393312129, --1.19517481746,1.50695955245,-1.8189822315, --1.19517481746,1.54160230078,-1.85402095494, --1.19517481746,1.57624504911,-1.88905295722, --1.19517481746,1.61088779744,-1.92407442193, --1.19517481746,1.64553054577,-1.95580819459, --1.19517481746,1.68017329411,-1.99407428251, --1.19517481746,1.71481604244,-2.02905548012, --1.16053206913,-1.71481604244,1.08875037055, --1.16053206913,-1.68017329411,1.07604465768, --1.16053206913,-1.64553054577,1.06082996497, --1.16053206913,-1.61088779744,1.0435697047, --1.16053206913,-1.57624504911,1.02461762005, --1.16053206913,-1.54160230078,1.00421414865, --1.16053206913,-1.50695955245,0.982561215448, --1.16053206913,-1.47231680411,0.959818260676, --1.16053206913,-1.43767405578,0.936100598195, --1.16053206913,-1.40303130745,0.911489179269, --1.16053206913,-1.36838855912,0.886118524045, --1.16053206913,-1.33374581079,0.860050789559, --1.16053206913,-1.29910306245,0.833332231524, --1.16053206913,-1.26446031412,0.811683526997, --1.16053206913,-1.22981756579,0.798123649137, --1.16053206913,-1.19517481746,0.781583528803, --1.16053206913,-1.16053206913,0.762629986068, --1.16053206913,-1.12588932079,0.741683446565, --1.16053206913,-1.09124657246,0.719059675181, --1.16053206913,-1.05660382413,0.695034548571, --1.16053206913,-1.0219610758,0.669792847451, --1.16053206913,-0.987318327465,0.643521891698, --1.16053206913,-0.952675579133,0.616349000961, --1.16053206913,-0.918032830801,0.588405103338, --1.16053206913,-0.883390082469,0.558821221562, --1.16053206913,-0.848747334136,0.527560973207, --1.16053206913,-0.814104585804,0.496104567394, --1.16053206913,-0.779461837472,0.464469998731, --1.16053206913,-0.74481908914,0.43265925389, --1.16053206913,-0.710176340808,0.400685335703, --1.16053206913,-0.675533592476,0.368550512095, --1.16053206913,-0.640890844144,0.336291898527, --1.16053206913,-0.606248095812,0.303870410335, --1.16053206913,-0.57160534748,0.271326541568, --1.16053206913,-0.536962599148,0.238656586674, --1.16053206913,-0.502319850815,0.205869571841, --1.16053206913,-0.467677102483,0.172964483294, --1.16053206913,-0.433034354151,0.139954931472, --1.16053206913,-0.398391605819,0.106843388361, --1.16053206913,-0.363748857487,0.0736347127708, --1.16053206913,-0.329106109155,0.0403247049277, --1.16053206913,-0.294463360823,0.0069397956481, --1.16053206913,-0.259820612491,-0.0265431038719, --1.16053206913,-0.225177864159,-0.0601092198049, --1.16053206913,-0.190535115827,-0.0937449127528, --1.16053206913,-0.155892367494,-0.127468945636, --1.16053206913,-0.121249619162,-0.161247282178, --1.16053206913,-0.0866068708302,-0.195099282601, --1.16053206913,-0.0519641224981,-0.229022755877, --1.16053206913,-0.017321374166,-0.263006248138, --1.16053206913,0.017321374166,-0.296796331806, --1.16053206913,0.0519641224981,-0.330921466236, --1.16053206913,0.0866068708302,-0.365092727913, --1.16053206913,0.121249619162,-0.399320264777, --1.16053206913,0.155892367494,-0.433590799267, --1.16053206913,0.190535115827,-0.46791606437, --1.16053206913,0.225177864159,-0.502272938027, --1.16053206913,0.259820612491,-0.536685345933, --1.16053206913,0.294463360823,-0.571133792224, --1.16053206913,0.329106109155,-0.605627161604, --1.16053206913,0.363748857487,-0.640164445095, --1.16053206913,0.398391605819,-0.674734753812, --1.16053206913,0.433034354151,-0.709341197542, --1.16053206913,0.467677102483,-0.743979907684, --1.16053206913,0.502319850815,-0.778656110185, --1.16053206913,0.536962599148,-0.813362432366, --1.16053206913,0.57160534748,-0.84809553084, --1.16053206913,0.606248095812,-0.882866843777, --1.16053206913,0.640890844144,-0.917654872641, --1.16053206913,0.675533592476,-0.95248251964, --1.16053206913,0.710176340808,-0.987329546838, --1.16053206913,0.74481908914,-1.02219631382, --1.16053206913,0.779461837472,-1.05708616645, --1.16053206913,0.814104585804,-1.09200473833, --1.16053206913,0.848747334136,-1.12696802041, --1.16053206913,0.883390082469,-1.16198641846, --1.16053206913,0.918032830801,-1.19702325518, --1.16053206913,0.952675579133,-1.23207951968, --1.16053206913,0.987318327465,-1.26714540695, --1.16053206913,1.0219610758,-1.30222424224, --1.16053206913,1.05660382413,-1.3373161411, --1.16053206913,1.09124657246,-1.37241905639, --1.16053206913,1.12588932079,-1.40753162314, --1.16053206913,1.16053206913,-1.44265681035, --1.16053206913,1.19517481746,-1.47777330098, --1.16053206913,1.22981756579,-1.51292277896, --1.16053206913,1.26446031412,-1.54805183764, --1.16053206913,1.29910306245,-1.58319600754, --1.16053206913,1.33374581079,-1.61833934309, --1.16053206913,1.36838855912,-1.65348680773, --1.16053206913,1.40303130745,-1.688633221, --1.16053206913,1.43767405578,-1.72377784963, --1.16053206913,1.47231680411,-1.75892328971, --1.16053206913,1.50695955245,-1.79405793571, --1.16053206913,1.54160230078,-1.82919351458, --1.16053206913,1.57624504911,-1.86432206446, --1.16053206913,1.61088779744,-1.89945055276, --1.16053206913,1.64553054577,-1.93455455963, --1.16053206913,1.68017329411,-1.96966521108, --1.16053206913,1.71481604244,-2.00476093249, --1.12588932079,-1.71481604244,1.11090679928, --1.12588932079,-1.68017329411,1.09824528812, --1.12588932079,-1.64553054577,1.08301987233, --1.12588932079,-1.61088779744,1.065767456, --1.12588932079,-1.57624504911,1.0467926834, --1.12588932079,-1.54160230078,1.02636753197, --1.12588932079,-1.50695955245,1.00469586369, --1.12588932079,-1.47231680411,0.981927467042, --1.12588932079,-1.43767405578,0.958171846814, --1.12588932079,-1.40303130745,0.933566758635, --1.12588932079,-1.36838855912,0.908164121217, --1.12588932079,-1.33374581079,0.882083331936, --1.12588932079,-1.29910306245,0.855365684637, --1.12588932079,-1.26446031412,0.83589100524, --1.12588932079,-1.22981756579,0.822373536786, --1.12588932079,-1.19517481746,0.805851565613, --1.12588932079,-1.16053206913,0.786910670662, --1.12588932079,-1.12588932079,0.765976687401, --1.12588932079,-1.09124657246,0.743358188993, --1.12588932079,-1.05660382413,0.719338574271, --1.12588932079,-1.0219610758,0.694103040201, --1.12588932079,-0.987318327465,0.667831808157, --1.12588932079,-0.952675579133,0.640666288613, --1.12588932079,-0.918032830801,0.61272348835, --1.12588932079,-0.883390082469,0.583826611142, --1.12588932079,-0.848747334136,0.552587975653, --1.12588932079,-0.814104585804,0.521152756896, --1.12588932079,-0.779461837472,0.489532412185, --1.12588932079,-0.74481908914,0.457739178498, --1.12588932079,-0.710176340808,0.425775969888, --1.12588932079,-0.675533592476,0.393658141859, --1.12588932079,-0.640890844144,0.361391820175, --1.12588932079,-0.606248095812,0.328982121588, --1.12588932079,-0.57160534748,0.29645021042, --1.12588932079,-0.536962599148,0.263782836998, --1.12588932079,-0.502319850815,0.230998015688, --1.12588932079,-0.467677102483,0.198094800095, --1.12588932079,-0.433034354151,0.165083657614, --1.12588932079,-0.398391605819,0.131970837208, --1.12588932079,-0.363748857487,0.0987539545122, --1.12588932079,-0.329106109155,0.065448483047, --1.12588932079,-0.294463360823,0.0320471370542, --1.12588932079,-0.259820612491,-0.00144461440564, --1.12588932079,-0.225177864159,-0.035011739324, --1.12588932079,-0.190535115827,-0.0686627251189, --1.12588932079,-0.155892367494,-0.102389574631, --1.12588932079,-0.121249619162,-0.136176244945, --1.12588932079,-0.0866068708302,-0.170049868664, --1.12588932079,-0.0519641224981,-0.203984832094, --1.12588932079,-0.017321374166,-0.23798112123, --1.12588932079,0.017321374166,-0.272041957031, --1.12588932079,0.0519641224981,-0.305950969736, --1.12588932079,0.0866068708302,-0.340145745129, --1.12588932079,0.121249619162,-0.374383645182, --1.12588932079,0.155892367494,-0.408677328462, --1.12588932079,0.190535115827,-0.443017620488, --1.12588932079,0.225177864159,-0.477405810963, --1.12588932079,0.259820612491,-0.511839809144, --1.12588932079,0.294463360823,-0.546300445505, --1.12588932079,0.329106109155,-0.58082097583, --1.12588932079,0.363748857487,-0.615374198815, --1.12588932079,0.398391605819,-0.649966008325, --1.12588932079,0.433034354151,-0.684596248237, --1.12588932079,0.467677102483,-0.719261460078, --1.12588932079,0.502319850815,-0.753963933448, --1.12588932079,0.536962599148,-0.788700410838, --1.12588932079,0.57160534748,-0.823460165836, --1.12588932079,0.606248095812,-0.858260072017, --1.12588932079,0.640890844144,-0.893088680236, --1.12588932079,0.675533592476,-0.927937948046, --1.12588932079,0.710176340808,-0.962813673956, --1.12588932079,0.74481908914,-0.99772044618, --1.12588932079,0.779461837472,-1.03266269161, --1.12588932079,0.814104585804,-1.06759755462, --1.12588932079,0.848747334136,-1.10258265218, --1.12588932079,0.883390082469,-1.13757888165, --1.12588932079,0.918032830801,-1.1725951793, --1.12588932079,0.952675579133,-1.20762852896, --1.12588932079,0.987318327465,-1.24268169795, --1.12588932079,1.0219610758,-1.27780636179, --1.12588932079,1.05660382413,-1.31294246431, --1.12588932079,1.09124657246,-1.34810084595, --1.12588932079,1.12588932079,-1.38325831766, --1.12588932079,1.16053206913,-1.41844013672, --1.12588932079,1.19517481746,-1.45362061424, --1.12588932079,1.22981756579,-1.48882106404, --1.12588932079,1.26446031412,-1.52402219513, --1.12588932079,1.29910306245,-1.55921764282, --1.12588932079,1.33374581079,-1.59442739816, --1.12588932079,1.36838855912,-1.62964076917, --1.12588932079,1.40303130745,-1.66485760158, --1.12588932079,1.43767405578,-1.7000713016, --1.12588932079,1.47231680411,-1.73528763522, --1.12588932079,1.50695955245,-1.77050824337, --1.12588932079,1.54160230078,-1.80571974714, --1.12588932079,1.57624504911,-1.84092768429, --1.12588932079,1.61088779744,-1.87614040295, --1.12588932079,1.64553054577,-1.91133195608, --1.12588932079,1.68017329411,-1.94652218955, --1.12588932079,1.71481604244,-1.9817084538, --1.09124657246,-1.71481604244,1.1318477032, --1.09124657246,-1.68017329411,1.11919438844, --1.09124657246,-1.64553054577,1.10399832271, --1.09124657246,-1.61088779744,1.08674797501, --1.09124657246,-1.57624504911,1.06774505535, --1.09124657246,-1.54160230078,1.04729386058, --1.09124657246,-1.50695955245,1.02562404475, --1.09124657246,-1.47231680411,1.00282009054, --1.09124657246,-1.43767405578,0.979038602599, --1.09124657246,-1.40303130745,0.954415493881, --1.09124657246,-1.36838855912,0.929007952231, --1.09124657246,-1.33374581079,0.902894109787, --1.09124657246,-1.29910306245,0.876187396499, --1.09124657246,-1.26446031412,0.858771665441, --1.09124657246,-1.22981756579,0.845263882239, --1.09124657246,-1.19517481746,0.828766622491, --1.09124657246,-1.16053206913,0.809833233926, --1.09124657246,-1.12588932079,0.78890846052, --1.09124657246,-1.09124657246,0.766298099672, --1.09124657246,-1.05660382413,0.742284280901, --1.09124657246,-1.0219610758,0.717049097543, --1.09124657246,-0.987318327465,0.690783311239, --1.09124657246,-0.952675579133,0.663616466787, --1.09124657246,-0.918032830801,0.635670976384, --1.09124657246,-0.883390082469,0.606601293894, --1.09124657246,-0.848747334136,0.57543594633, --1.09124657246,-0.814104585804,0.544078657446, --1.09124657246,-0.779461837472,0.512535777396, --1.09124657246,-0.74481908914,0.480808510823, --1.09124657246,-0.710176340808,0.448915238945, --1.09124657246,-0.675533592476,0.416858992606, --1.09124657246,-0.640890844144,0.384643321739, --1.09124657246,-0.606248095812,0.352292471931, --1.09124657246,-0.57160534748,0.319788714302, --1.09124657246,-0.536962599148,0.287157106739, --1.09124657246,-0.502319850815,0.254398750124, --1.09124657246,-0.467677102483,0.221523590365, --1.09124657246,-0.433034354151,0.188531418119, --1.09124657246,-0.398391605819,0.155431007101, --1.09124657246,-0.363748857487,0.122231141218, --1.09124657246,-0.329106109155,0.0889331791508, --1.09124657246,-0.294463360823,0.0555431086589, --1.09124657246,-0.259820612491,0.0220598122269, --1.09124657246,-0.225177864159,-0.0115131782218, --1.09124657246,-0.190535115827,-0.0451568919586, --1.09124657246,-0.155892367494,-0.0788821729906, --1.09124657246,-0.121249619162,-0.112676715982, --1.09124657246,-0.0866068708302,-0.146553130459, --1.09124657246,-0.0519641224981,-0.18049675951, --1.09124657246,-0.017321374166,-0.214501025333, --1.09124657246,0.017321374166,-0.248572354048, --1.09124657246,0.0519641224981,-0.282584602187, --1.09124657246,0.0866068708302,-0.316779266202, --1.09124657246,0.121249619162,-0.351026345533, --1.09124657246,0.155892367494,-0.385323810488, --1.09124657246,0.190535115827,-0.419662686668, --1.09124657246,0.225177864159,-0.454058570188, --1.09124657246,0.259820612491,-0.488492310225, --1.09124657246,0.294463360823,-0.522979702542, --1.09124657246,0.329106109155,-0.557506783328, --1.09124657246,0.363748857487,-0.592068642725, --1.09124657246,0.398391605819,-0.626668776334, --1.09124657246,0.433034354151,-0.661313200811, --1.09124657246,0.467677102483,-0.695994263077, --1.09124657246,0.502319850815,-0.730711827765, --1.09124657246,0.536962599148,-0.765462708882, --1.09124657246,0.57160534748,-0.800247362347, --1.09124657246,0.606248095812,-0.835062208543, --1.09124657246,0.640890844144,-0.869911223882, --1.09124657246,0.675533592476,-0.9047877729, --1.09124657246,0.710176340808,-0.939692061858, --1.09124657246,0.74481908914,-0.974632703685, --1.09124657246,0.779461837472,-1.00958927436, --1.09124657246,0.814104585804,-1.0445773143, --1.09124657246,0.848747334136,-1.07957738521, --1.09124657246,0.883390082469,-1.11460905827, --1.09124657246,0.918032830801,-1.1496578734, --1.09124657246,0.952675579133,-1.18472602586, --1.09124657246,0.987318327465,-1.21981550423, --1.09124657246,1.0219610758,-1.25492454887, --1.09124657246,1.05660382413,-1.29004930921, --1.09124657246,1.09124657246,-1.32518440559, --1.09124657246,1.12588932079,-1.3603421662, --1.09124657246,1.16053206913,-1.39556314074, --1.09124657246,1.19517481746,-1.43079540249, --1.09124657246,1.22981756579,-1.46604002879, --1.09124657246,1.26446031412,-1.50129124883, --1.09124657246,1.29910306245,-1.53654025431, --1.09124657246,1.33374581079,-1.57180829934, --1.09124657246,1.36838855912,-1.60707807142, --1.09124657246,1.40303130745,-1.64235026695, --1.09124657246,1.43767405578,-1.67762618232, --1.09124657246,1.47231680411,-1.7129055115, --1.09124657246,1.50695955245,-1.74818524635, --1.09124657246,1.54160230078,-1.78346786197, --1.09124657246,1.57624504911,-1.81874965426, --1.09124657246,1.61088779744,-1.85402095494, --1.09124657246,1.64553054577,-1.88929117916, --1.09124657246,1.68017329411,-1.92456009568, --1.09124657246,1.71481604244,-1.95983462622, --1.05660382413,-1.71481604244,1.1516773239, --1.05660382413,-1.68017329411,1.13905204269, --1.05660382413,-1.64553054577,1.12385990111, --1.05660382413,-1.61088779744,1.10657810713, --1.05660382413,-1.57624504911,1.08760379616, --1.05660382413,-1.54160230078,1.0671495763, --1.05660382413,-1.50695955245,1.04541096144, --1.05660382413,-1.47231680411,1.02260280746, --1.05660382413,-1.43767405578,0.99881616642, --1.05660382413,-1.40303130745,0.974155481541, --1.05660382413,-1.36838855912,0.948732358705, --1.05660382413,-1.33374581079,0.922629277462, --1.05660382413,-1.29910306245,0.895905396715, --1.05660382413,-1.26446031412,0.880433243051, --1.05660382413,-1.22981756579,0.866952350596, --1.05660382413,-1.19517481746,0.850462220224, --1.05660382413,-1.16053206913,0.831535176339, --1.05660382413,-1.12588932079,0.810620269897, --1.05660382413,-1.09124657246,0.788019730896, --1.05660382413,-1.05660382413,0.764009198152, --1.05660382413,-1.0219610758,0.738780259078, --1.05660382413,-0.987318327465,0.712512501023, --1.05660382413,-0.952675579133,0.685347703256, --1.05660382413,-0.918032830801,0.657405348354, --1.05660382413,-0.883390082469,0.62759604707, --1.05660382413,-0.848747334136,0.596334275883, --1.05660382413,-0.814104585804,0.564912531299, --1.05660382413,-0.779461837472,0.533310743866, --1.05660382413,-0.74481908914,0.501544890411, --1.05660382413,-0.710176340808,0.469611823273, --1.05660382413,-0.675533592476,0.437534242747, --1.05660382413,-0.640890844144,0.4053212189, --1.05660382413,-0.606248095812,0.372954314419, --1.05660382413,-0.57160534748,0.340478506281, --1.05660382413,-0.536962599148,0.307865449455, --1.05660382413,-0.502319850815,0.275145279179, --1.05660382413,-0.467677102483,0.242316830653, --1.05660382413,-0.433034354151,0.209386862675, --1.05660382413,-0.398391605819,0.176362081248, --1.05660382413,-0.363748857487,0.14324969365, --1.05660382413,-0.329106109155,0.110054875383, --1.05660382413,-0.294463360823,0.0767713976125, --1.05660382413,-0.259820612491,0.0434084936939, --1.05660382413,-0.225177864159,0.00996028576952, --1.05660382413,-0.190535115827,-0.0235908658463, --1.05660382413,-0.155892367494,-0.0572372657828, --1.05660382413,-0.121249619162,-0.0909646488355, --1.05660382413,-0.0866068708302,-0.124792207766, --1.05660382413,-0.0519641224981,-0.158696727552, --1.05660382413,-0.017321374166,-0.192673016498, --1.05660382413,0.017321374166,-0.226718142394, --1.05660382413,0.0519641224981,-0.261227959136, --1.05660382413,0.0866068708302,-0.295369724327, --1.05660382413,0.121249619162,-0.329555196616, --1.05660382413,0.155892367494,-0.363789029174, --1.05660382413,0.190535115827,-0.398060617679, --1.05660382413,0.225177864159,-0.432383560196, --1.05660382413,0.259820612491,-0.466761750452, --1.05660382413,0.294463360823,-0.501195705809, --1.05660382413,0.329106109155,-0.535681179157, --1.05660382413,0.363748857487,-0.570215499876, --1.05660382413,0.398391605819,-0.604780330767, --1.05660382413,0.433034354151,-0.639415974464, --1.05660382413,0.467677102483,-0.674088024301, --1.05660382413,0.502319850815,-0.708802742298, --1.05660382413,0.536962599148,-0.74355261309, --1.05660382413,0.57160534748,-0.778343296748, --1.05660382413,0.606248095812,-0.813165519824, --1.05660382413,0.640890844144,-0.848022057919, --1.05660382413,0.675533592476,-0.882914431448, --1.05660382413,0.710176340808,-0.917833831092, --1.05660382413,0.74481908914,-0.952784580031, --1.05660382413,0.779461837472,-0.987768109044, --1.05660382413,0.814104585804,-1.02276469819, --1.05660382413,0.848747334136,-1.05779903707, --1.05660382413,0.883390082469,-1.09285409975, --1.05660382413,0.918032830801,-1.12792982007, --1.05660382413,0.952675579133,-1.16302897732, --1.05660382413,0.987318327465,-1.19815039359, --1.05660382413,1.0219610758,-1.23328609468, --1.05660382413,1.05660382413,-1.2684424602, --1.05660382413,1.09124657246,-1.30361554759, --1.05660382413,1.12588932079,-1.3388060315, --1.05660382413,1.16053206913,-1.37401293304, --1.05660382413,1.19517481746,-1.40922611367, --1.05660382413,1.22981756579,-1.44445819488, --1.05660382413,1.26446031412,-1.47973635771, --1.05660382413,1.29910306245,-1.51504439595, --1.05660382413,1.33374581079,-1.55035534444, --1.05660382413,1.36838855912,-1.58567166331, --1.05660382413,1.40303130745,-1.62099358288, --1.05660382413,1.43767405578,-1.65631974302, --1.05660382413,1.47231680411,-1.69165538212, --1.05660382413,1.50695955245,-1.72698930956, --1.05660382413,1.54160230078,-1.76232313165, --1.05660382413,1.57624504911,-1.79765916267, --1.05660382413,1.61088779744,-1.83300127592, --1.05660382413,1.64553054577,-1.86833554452, --1.05660382413,1.68017329411,-1.90367100374, --1.05660382413,1.71481604244,-1.93900175312, --1.0219610758,-1.71481604244,1.17052042953, --1.0219610758,-1.68017329411,1.15792792649, --1.0219610758,-1.64553054577,1.14272773023, --1.0219610758,-1.61088779744,1.12543770871, --1.0219610758,-1.57624504911,1.10645641576, --1.0219610758,-1.54160230078,1.08596549685, --1.0219610758,-1.50695955245,1.06424740488, --1.0219610758,-1.47231680411,1.041400223, --1.0219610758,-1.43767405578,1.01759773097, --1.0219610758,-1.40303130745,0.992928355705, --1.0219610758,-1.36838855912,0.967493537784, --1.0219610758,-1.33374581079,0.941379659495, --1.0219610758,-1.29910306245,0.914637457543, --1.0219610758,-1.26446031412,0.901022748403, --1.0219610758,-1.22981756579,0.887544077187, --1.0219610758,-1.19517481746,0.871061020144, --1.0219610758,-1.16053206913,0.852160719083, --1.0219610758,-1.12588932079,0.831248190866, --1.0219610758,-1.09124657246,0.808646921948, --1.0219610758,-1.05660382413,0.784640170882, --1.0219610758,-1.0219610758,0.759412586697, --1.0219610758,-0.987318327465,0.733147807923, --1.0219610758,-0.952675579133,0.705985121727, --1.0219610758,-0.918032830801,0.67803975024, --1.0219610758,-0.883390082469,0.648271401967, --1.0219610758,-0.848747334136,0.617064445115, --1.0219610758,-0.814104585804,0.585655685333, --1.0219610758,-0.779461837472,0.554064936346, --1.0219610758,-0.74481908914,0.522295699806, --1.0219610758,-0.710176340808,0.490360004151, --1.0219610758,-0.675533592476,0.458260851969, --1.0219610758,-0.640890844144,0.426025422679, --1.0219610758,-0.606248095812,0.39343868605, --1.0219610758,-0.57160534748,0.360894008396, --1.0219610758,-0.536962599148,0.328236437879, --1.0219610758,-0.502319850815,0.295451087732, --1.0219610758,-0.467677102483,0.262555506569, --1.0219610758,-0.433034354151,0.229551231065, --1.0219610758,-0.398391605819,0.196438451479, --1.0219610758,-0.363748857487,0.163228726981, --1.0219610758,-0.329106109155,0.129919333674, --1.0219610758,-0.294463360823,0.096525091841, --1.0219610758,-0.259820612491,0.0630358068559, --1.0219610758,-0.225177864159,0.0294638986372, --1.0219610758,-0.190535115827,-0.00418298534961, --1.0219610758,-0.155892367494,-0.0379150882701, --1.0219610758,-0.121249619162,-0.0717169325788, --1.0219610758,-0.0866068708302,-0.105589337012, --1.0219610758,-0.0519641224981,-0.139545434989, --1.0219610758,-0.017321374166,-0.17355744078, --1.0219610758,0.017321374166,-0.207615274315, --1.0219610758,0.0519641224981,-0.24125717169, --1.0219610758,0.0866068708302,-0.275438784685, --1.0219610758,0.121249619162,-0.30968108234, --1.0219610758,0.155892367494,-0.343984053547, --1.0219610758,0.190535115827,-0.378335833773, --1.0219610758,0.225177864159,-0.412741066576, --1.0219610758,0.259820612491,-0.447191870516, --1.0219610758,0.294463360823,-0.48169117368, --1.0219610758,0.329106109155,-0.516238197998, --1.0219610758,0.363748857487,-0.550813757144, --1.0219610758,0.398391605819,-0.585431918441, --1.0219610758,0.433034354151,-0.620086131973, --1.0219610758,0.467677102483,-0.654761844733, --1.0219610758,0.502319850815,-0.689437780903, --1.0219610758,0.536962599148,-0.724045282584, --1.0219610758,0.57160534748,-0.757856098137, --1.0219610758,0.606248095812,-0.79257499223, --1.0219610758,0.640890844144,-0.827384871665, --1.0219610758,0.675533592476,-0.862246501777, --1.0219610758,0.710176340808,-0.897157652115, --1.0219610758,0.74481908914,-0.932100664677, --1.0219610758,0.779461837472,-0.967081361064, --1.0219610758,0.814104585804,-1.00209916828, --1.0219610758,0.848747334136,-1.03714448667, --1.0219610758,0.883390082469,-1.07220559907, --1.0219610758,0.918032830801,-1.1073060434, --1.0219610758,0.952675579133,-1.14242430048, --1.0219610758,0.987318327465,-1.17756830272, --1.0219610758,1.0219610758,-1.21272865558, --1.0219610758,1.05660382413,-1.24791242416, --1.0219610758,1.09124657246,-1.28311474684, --1.0219610758,1.12588932079,-1.31833153508, --1.0219610758,1.16053206913,-1.35357070457, --1.0219610758,1.19517481746,-1.38882633786, --1.0219610758,1.22981756579,-1.42408262025, --1.0219610758,1.26446031412,-1.45936720648, --1.0219610758,1.29910306245,-1.49465212567, --1.0219610758,1.33374581079,-1.52995302233, --1.0219610758,1.36838855912,-1.56531188664, --1.0219610758,1.40303130745,-1.6006759569, --1.0219610758,1.43767405578,-1.63604563203, --1.0219610758,1.47231680411,-1.67142412676, --1.0219610758,1.50695955245,-1.70680176135, --1.0219610758,1.54160230078,-1.7421853421, --1.0219610758,1.57624504911,-1.77757355464, --1.0219610758,1.61088779744,-1.81296573746, --1.0219610758,1.64553054577,-1.8483494398, --1.0219610758,1.68017329411,-1.88373804201, --1.0219610758,1.71481604244,-1.91912275882, --0.987318327465,-1.71481604244,1.18843748224, --0.987318327465,-1.68017329411,1.17586623869, --0.987318327465,-1.64553054577,1.16067487507, --0.987318327465,-1.61088779744,1.1434100173, --0.987318327465,-1.57624504911,1.12438985536, --0.987318327465,-1.54160230078,1.10391469689, --0.987318327465,-1.50695955245,1.08215914319, --0.987318327465,-1.47231680411,1.05929972976, --0.987318327465,-1.43767405578,1.03548442541, --0.987318327465,-1.40303130745,1.01082831897, --0.987318327465,-1.36838855912,0.985376973769, --0.987318327465,-1.33374581079,0.959243984625, --0.987318327465,-1.29910306245,0.932513535604, --0.987318327465,-1.26446031412,0.92061717816, --0.987318327465,-1.22981756579,0.907155876868, --0.987318327465,-1.19517481746,0.890680740444, --0.987318327465,-1.16053206913,0.871781583405, --0.987318327465,-1.12588932079,0.850876680033, --0.987318327465,-1.09124657246,0.828287214593, --0.987318327465,-1.05660382413,0.80427534165, --0.987318327465,-1.0219610758,0.779053467201, --0.987318327465,-0.987318327465,0.752790601109, --0.987318327465,-0.952675579133,0.72562684494, --0.987318327465,-0.918032830801,0.697686183799, --0.987318327465,-0.883390082469,0.667812896014, --0.987318327465,-0.848747334136,0.636630530631, --0.987318327465,-0.814104585804,0.605251384007, --0.987318327465,-0.779461837472,0.573692461923, --0.987318327465,-0.74481908914,0.541943598726, --0.987318327465,-0.710176340808,0.510039113424, --0.987318327465,-0.675533592476,0.477963079606, --0.987318327465,-0.640890844144,0.445750806613, --0.987318327465,-0.606248095812,0.41338648648, --0.987318327465,-0.57160534748,0.380878487182, --0.987318327465,-0.536962599148,0.348253714819, --0.987318327465,-0.502319850815,0.315491450148, --0.987318327465,-0.467677102483,0.282619049072, --0.987318327465,-0.433034354151,0.249632386015, --0.987318327465,-0.398391605819,0.216450379659, --0.987318327465,-0.363748857487,0.183135704498, --0.987318327465,-0.329106109155,0.149819160963, --0.987318327465,-0.294463360823,0.116415270021, --0.987318327465,-0.259820612491,0.082923151896, --0.987318327465,-0.225177864159,0.0493429786759, --0.987318327465,-0.190535115827,0.0156809714967, --0.987318327465,-0.155892367494,-0.0180572420009, --0.987318327465,-0.121249619162,-0.0518625078947, --0.987318327465,-0.0866068708302,-0.0857491479883, --0.987318327465,-0.0519641224981,-0.119707930309, --0.987318327465,-0.017321374166,-0.153722524776, --0.987318327465,0.017321374166,-0.187808074943, --0.987318327465,0.0519641224981,-0.221571107351, --0.987318327465,0.0866068708302,-0.25578319319, --0.987318327465,0.121249619162,-0.29001705251, --0.987318327465,0.155892367494,-0.324316545018, --0.987318327465,0.190535115827,-0.358674408615, --0.987318327465,0.225177864159,-0.393084692179, --0.987318327465,0.259820612491,-0.427558052542, --0.987318327465,0.294463360823,-0.462069718422, --0.987318327465,0.329106109155,-0.496635998285, --0.987318327465,0.363748857487,-0.531250974045, --0.987318327465,0.398391605819,-0.565901218038, --0.987318327465,0.433034354151,-0.600598431138, --0.987318327465,0.467677102483,-0.635332850923, --0.987318327465,0.502319850815,-0.67011147985, --0.987318327465,0.536962599148,-0.704924642257, --0.987318327465,0.57160534748,-0.739770442801, --0.987318327465,0.606248095812,-0.774649953149, --0.987318327465,0.640890844144,-0.809565000211, --0.987318327465,0.675533592476,-0.84450661509, --0.987318327465,0.710176340808,-0.879477353714, --0.987318327465,0.74481908914,-0.914469608036, --0.987318327465,0.779461837472,-0.949497426203, --0.987318327465,0.814104585804,-0.984534515711, --0.987318327465,0.848747334136,-1.01755155306, --0.987318327465,0.883390082469,-1.05260418279, --0.987318327465,0.918032830801,-1.08770157121, --0.987318327465,0.952675579133,-1.1228288407, --0.987318327465,0.987318327465,-1.15798291403, --0.987318327465,1.0219610758,-1.1931616982, --0.987318327465,1.05660382413,-1.22836276836, --0.987318327465,1.09124657246,-1.26358311331, --0.987318327465,1.12588932079,-1.29882728212, --0.987318327465,1.16053206913,-1.33408963159, --0.987318327465,1.19517481746,-1.36936448865, --0.987318327465,1.22981756579,-1.40466229906, --0.987318327465,1.26446031412,-1.43996582622, --0.987318327465,1.29910306245,-1.47529802488, --0.987318327465,1.33374581079,-1.51063014112, --0.987318327465,1.36838855912,-1.54597242951, --0.987318327465,1.40303130745,-1.58133094163, --0.987318327465,1.43767405578,-1.6167112319, --0.987318327465,1.47231680411,-1.6521290906, --0.987318327465,1.50695955245,-1.68754761591, --0.987318327465,1.54160230078,-1.72297162504, --0.987318327465,1.57624504911,-1.75840480252, --0.987318327465,1.61088779744,-1.79383806997, --0.987318327465,1.64553054577,-1.82926947973, --0.987318327465,1.68017329411,-1.8647037687, --0.987318327465,1.71481604244,-1.90014389709, --0.952675579133,-1.71481604244,1.20558538308, --0.952675579133,-1.68017329411,1.19300493184, --0.952675579133,-1.64553054577,1.17781716714, --0.952675579133,-1.61088779744,1.16053840793, --0.952675579133,-1.57624504911,1.14150623277, --0.952675579133,-1.54160230078,1.12101928497, --0.952675579133,-1.50695955245,1.09926133543, --0.952675579133,-1.47231680411,1.07638783164, --0.952675579133,-1.43767405578,1.05255649601, --0.952675579133,-1.40303130745,1.02788481171, --0.952675579133,-1.36838855912,1.00245010581, --0.952675579133,-1.33374581079,0.976289810252, --0.952675579133,-1.29910306245,0.949544627339, --0.952675579133,-1.26446031412,0.939318209228, --0.952675579133,-1.22981756579,0.925864886691, --0.952675579133,-1.19517481746,0.90940879982, --0.952675579133,-1.16053206913,0.890516857099, --0.952675579133,-1.12588932079,0.869612165477, --0.952675579133,-1.09124657246,0.847021931708, --0.952675579133,-1.05660382413,0.823025511667, --0.952675579133,-1.0219610758,0.797785209425, --0.952675579133,-0.987318327465,0.771531404988, --0.952675579133,-0.952675579133,0.744369400088, --0.952675579133,-0.918032830801,0.716425052017, --0.952675579133,-0.883390082469,0.686430672332, --0.952675579133,-0.848747334136,0.655279890623, --0.952675579133,-0.814104585804,0.623928444088, --0.952675579133,-0.779461837472,0.592394731023, --0.952675579133,-0.74481908914,0.560677530374, --0.952675579133,-0.710176340808,0.528796141147, --0.952675579133,-0.675533592476,0.496747578112, --0.952675579133,-0.640890844144,0.464552478221, --0.952675579133,-0.606248095812,0.432212403633, --0.952675579133,-0.57160534748,0.399736788179, --0.952675579133,-0.536962599148,0.367122184805, --0.952675579133,-0.502319850815,0.334381306517, --0.952675579133,-0.467677102483,0.301525360896, --0.952675579133,-0.433034354151,0.26855686504, --0.952675579133,-0.398391605819,0.235475340092, --0.952675579133,-0.363748857487,0.202293943801, --0.952675579133,-0.329106109155,0.169013656249, --0.952675579133,-0.294463360823,0.13563187132, --0.952675579133,-0.259820612491,0.10216899043, --0.952675579133,-0.225177864159,0.0686116777381, --0.952675579133,-0.190535115827,0.034821156675, --0.952675579133,-0.155892367494,0.00107487645185, --0.952675579133,-0.121249619162,-0.0327353939706, --0.952675579133,-0.0866068708302,-0.0666282559561, --0.952675579133,-0.0519641224981,-0.100590731382, --0.952675579133,-0.017321374166,-0.134606416842, --0.952675579133,0.017321374166,-0.168698781069, --0.952675579133,0.0519641224981,-0.202452166053, --0.952675579133,0.0866068708302,-0.236683415167, --0.952675579133,0.121249619162,-0.270968743625, --0.952675579133,0.155892367494,-0.305302211428, --0.952675579133,0.190535115827,-0.339682590919, --0.952675579133,0.225177864159,-0.374106114899, --0.952675579133,0.259820612491,-0.408577918038, --0.952675579133,0.294463360823,-0.443090117209, --0.952675579133,0.329106109155,-0.477695867996, --0.952675579133,0.363748857487,-0.512311081304, --0.952675579133,0.398391605819,-0.546980148464, --0.952675579133,0.433034354151,-0.581680944402, --0.952675579133,0.467677102483,-0.616428446626, --0.952675579133,0.502319850815,-0.651216980444, --0.952675579133,0.536962599148,-0.686042014965, --0.952675579133,0.57160534748,-0.720906577779, --0.952675579133,0.606248095812,-0.755807424539, --0.952675579133,0.640890844144,-0.790739175624, --0.952675579133,0.675533592476,-0.82570294412, --0.952675579133,0.710176340808,-0.860697954733, --0.952675579133,0.74481908914,-0.89572462734, --0.952675579133,0.779461837472,-0.930780566996, --0.952675579133,0.814104585804,-0.965859651869, --0.952675579133,0.848747334136,-1.00097429015, --0.952675579133,0.883390082469,-1.03609490408, --0.952675579133,0.918032830801,-1.07125950706, --0.952675579133,0.952675579133,-1.1064322881, --0.952675579133,0.987318327465,-1.13934408569, --0.952675579133,1.0219610758,-1.17451767451, --0.952675579133,1.05660382413,-1.20972078489, --0.952675579133,1.09124657246,-1.24495355458, --0.952675579133,1.12588932079,-1.28021228265, --0.952675579133,1.16053206913,-1.31549178938, --0.952675579133,1.19517481746,-1.35079341252, --0.952675579133,1.22981756579,-1.38610385306, --0.952675579133,1.26446031412,-1.42143367387, --0.952675579133,1.29910306245,-1.45678257884, --0.952675579133,1.33374581079,-1.49215540642, --0.952675579133,1.36838855912,-1.52751789819, --0.952675579133,1.40303130745,-1.56291252387, --0.952675579133,1.43767405578,-1.5983111368, --0.952675579133,1.47231680411,-1.63371856522, --0.952675579133,1.50695955245,-1.66913874441, --0.952675579133,1.54160230078,-1.70460334148, --0.952675579133,1.57624504911,-1.74007007272, --0.952675579133,1.61088779744,-1.77554260074, --0.952675579133,1.64553054577,-1.81101984316, --0.952675579133,1.68017329411,-1.84649364962, --0.952675579133,1.71481604244,-1.88196772312, --0.918032830801,-1.71481604244,1.22192743513, --0.918032830801,-1.68017329411,1.20939935452, --0.918032830801,-1.64553054577,1.19423243511, --0.918032830801,-1.61088779744,1.17693773305, --0.918032830801,-1.57624504911,1.15789082304, --0.918032830801,-1.54160230078,1.13738681497, --0.918032830801,-1.50695955245,1.11559848933, --0.918032830801,-1.47231680411,1.09273866403, --0.918032830801,-1.43767405578,1.0689046341, --0.918032830801,-1.40303130745,1.04422077579, --0.918032830801,-1.36838855912,1.01876015566, --0.918032830801,-1.33374581079,0.99261609062, --0.918032830801,-1.29910306245,0.966888710599, --0.918032830801,-1.26446031412,0.957193882259, --0.918032830801,-1.22981756579,0.943750407751, --0.918032830801,-1.19517481746,0.927311070762, --0.918032830801,-1.16053206913,0.908418287316, --0.918032830801,-1.12588932079,0.887518480014, --0.918032830801,-1.09124657246,0.86493076112, --0.918032830801,-1.05660382413,0.84092977496, --0.918032830801,-1.0219610758,0.815717581432, --0.918032830801,-0.987318327465,0.789448969527, --0.918032830801,-0.952675579133,0.762286085877, --0.918032830801,-0.918032830801,0.734344652126, --0.918032830801,-0.883390082469,0.704099423204, --0.918032830801,-0.848747334136,0.672996326632, --0.918032830801,-0.814104585804,0.641688618544, --0.918032830801,-0.779461837472,0.61019123172, --0.918032830801,-0.74481908914,0.57850872645, --0.918032830801,-0.710176340808,0.546659533853, --0.918032830801,-0.675533592476,0.514648124929, --0.918032830801,-0.640890844144,0.482476039648, --0.918032830801,-0.606248095812,0.450158458799, --0.918032830801,-0.57160534748,0.41770491881, --0.918032830801,-0.536962599148,0.385116674463, --0.918032830801,-0.502319850815,0.352400034375, --0.918032830801,-0.467677102483,0.319571786085, --0.918032830801,-0.433034354151,0.286622334785, --0.918032830801,-0.398391605819,0.253560063134, --0.918032830801,-0.363748857487,0.22039261911, --0.918032830801,-0.329106109155,0.187127061439, --0.918032830801,-0.294463360823,0.153762269709, --0.918032830801,-0.259820612491,0.120309117219, --0.918032830801,-0.225177864159,0.0867658550586, --0.918032830801,-0.190535115827,0.0531343854692, --0.918032830801,-0.155892367494,0.0194193618507, --0.918032830801,-0.121249619162,-0.0143591406841, --0.918032830801,-0.0866068708302,-0.0482232644139, --0.918032830801,-0.0519641224981,-0.0822177858428, --0.918032830801,-0.017321374166,-0.116279356246, --0.918032830801,0.017321374166,-0.150370195692, --0.918032830801,0.0519641224981,-0.184181383636, --0.918032830801,0.0866068708302,-0.218431293977, --0.918032830801,0.121249619162,-0.252733272307, --0.918032830801,0.155892367494,-0.287086028981, --0.918032830801,0.190535115827,-0.321485737094, --0.918032830801,0.225177864159,-0.35593162373, --0.918032830801,0.259820612491,-0.390417979372, --0.918032830801,0.294463360823,-0.42494720176, --0.918032830801,0.329106109155,-0.459517936334, --0.918032830801,0.363748857487,-0.494125719566, --0.918032830801,0.398391605819,-0.528774076445, --0.918032830801,0.433034354151,-0.563457757962, --0.918032830801,0.467677102483,-0.598207976821, --0.918032830801,0.502319850815,-0.63306015444, --0.918032830801,0.536962599148,-0.667893712666, --0.918032830801,0.57160534748,-0.702766604941, --0.918032830801,0.606248095812,-0.737678658517, --0.918032830801,0.640890844144,-0.772623217143, --0.918032830801,0.675533592476,-0.807602332334, --0.918032830801,0.710176340808,-0.84260561803, --0.918032830801,0.74481908914,-0.877652851246, --0.918032830801,0.779461837472,-0.912716297978, --0.918032830801,0.814104585804,-0.94781898859, --0.918032830801,0.848747334136,-0.982943350029, --0.918032830801,0.883390082469,-1.01809159615, --0.918032830801,0.918032830801,-1.05326468354, --0.918032830801,0.952675579133,-1.08847183658, --0.918032830801,0.987318327465,-1.12369311557, --0.918032830801,1.0219610758,-1.15893694168, --0.918032830801,1.05660382413,-1.19420121645, --0.918032830801,1.09124657246,-1.22948599611, --0.918032830801,1.12588932079,-1.26478968351, --0.918032830801,1.16053206913,-1.30010845145, --0.918032830801,1.19517481746,-1.3354450211, --0.918032830801,1.22981756579,-1.37079361385, --0.918032830801,1.26446031412,-1.40616520136, --0.918032830801,1.29910306245,-1.44154369568, --0.918032830801,1.33374581079,-1.47693989615, --0.918032830801,1.36838855912,-1.51233834202, --0.918032830801,1.40303130745,-1.54774625007, --0.918032830801,1.43767405578,-1.58316841855, --0.918032830801,1.47231680411,-1.61859604062, --0.918032830801,1.50695955245,-1.65403031626, --0.918032830801,1.54160230078,-1.6894660834, --0.918032830801,1.57624504911,-1.72489986776, --0.918032830801,1.61088779744,-1.76031844789, --0.918032830801,1.64553054577,-1.79351933367, --0.918032830801,1.68017329411,-1.82903323711, --0.918032830801,1.71481604244,-1.86455301012, --0.883390082469,-1.71481604244,1.23763815828, --0.883390082469,-1.68017329411,1.22509293729, --0.883390082469,-1.64553054577,1.20990633426, --0.883390082469,-1.61088779744,1.19263011118, --0.883390082469,-1.57624504911,1.17359687418, --0.883390082469,-1.54160230078,1.153077721, --0.883390082469,-1.50695955245,1.13127153002, --0.883390082469,-1.47231680411,1.10839046104, --0.883390082469,-1.43767405578,1.08455616176, --0.883390082469,-1.40303130745,1.05984756907, --0.883390082469,-1.36838855912,1.03439567139, --0.883390082469,-1.33374581079,1.0082480056, --0.883390082469,-1.29910306245,0.984005796012, --0.883390082469,-1.26446031412,0.974330727339, --0.883390082469,-1.22981756579,0.96089957666, --0.883390082469,-1.19517481746,0.944457226824, --0.883390082469,-1.16053206913,0.925568042419, --0.883390082469,-1.12588932079,0.904677804802, --0.883390082469,-1.09124657246,0.882096478651, --0.883390082469,-1.05660382413,0.85809207144, --0.883390082469,-1.0219610758,0.832880269275, --0.883390082469,-0.987318327465,0.806616031418, --0.883390082469,-0.952675579133,0.77945080823, --0.883390082469,-0.918032830801,0.749287899679, --0.883390082469,-0.883390082469,0.71878921728, --0.883390082469,-0.848747334136,0.688323171004, --0.883390082469,-0.814104585804,0.65765207215, --0.883390082469,-0.779461837472,0.6265231189, --0.883390082469,-0.74481908914,0.595071100406, --0.883390082469,-0.710176340808,0.563373537115, --0.883390082469,-0.675533592476,0.531473973424, --0.883390082469,-0.640890844144,0.499403607029, --0.883390082469,-0.606248095812,0.46716408532, --0.883390082469,-0.57160534748,0.434759492297, --0.883390082469,-0.536962599148,0.402233092859, --0.883390082469,-0.502319850815,0.369557562764, --0.883390082469,-0.467677102483,0.336757066962, --0.883390082469,-0.433034354151,0.303838531302, --0.883390082469,-0.398391605819,0.270807253268, --0.883390082469,-0.363748857487,0.237661683451, --0.883390082469,-0.329106109155,0.204417132614, --0.883390082469,-0.294463360823,0.171075412128, --0.883390082469,-0.259820612491,0.137636999065, --0.883390082469,-0.225177864159,0.104105376161, --0.883390082469,-0.190535115827,0.0704919334905, --0.883390082469,-0.155892367494,0.0367941887306, --0.883390082469,-0.121249619162,0.00301194641476, --0.883390082469,-0.0866068708302,-0.0308399703866, --0.883390082469,-0.0519641224981,-0.0647682327111, --0.883390082469,-0.017321374166,-0.0987579411627, --0.883390082469,0.017321374166,-0.132832691664, --0.883390082469,0.0519641224981,-0.166949915662, --0.883390082469,0.0866068708302,-0.200966692547, --0.883390082469,0.121249619162,-0.235280101279, --0.883390082469,0.155892367494,-0.269646724921, --0.883390082469,0.190535115827,-0.304061106192, --0.883390082469,0.225177864159,-0.338521195521, --0.883390082469,0.259820612491,-0.373025437401, --0.883390082469,0.294463360823,-0.407578877724, --0.883390082469,0.329106109155,-0.442167720065, --0.883390082469,0.363748857487,-0.476794827626, --0.883390082469,0.398391605819,-0.511458499096, --0.883390082469,0.433034354151,-0.546164777917, --0.883390082469,0.467677102483,-0.580892500728, --0.883390082469,0.502319850815,-0.615671213919, --0.883390082469,0.536962599148,-0.650474545567, --0.883390082469,0.57160534748,-0.6853073667, --0.883390082469,0.606248095812,-0.720183640497, --0.883390082469,0.640890844144,-0.755198104857, --0.883390082469,0.675533592476,-0.79021626049, --0.883390082469,0.710176340808,-0.825236881209, --0.883390082469,0.74481908914,-0.860286052603, --0.883390082469,0.779461837472,-0.895370056799, --0.883390082469,0.814104585804,-0.930479460258, --0.883390082469,0.848747334136,-0.965620961862, --0.883390082469,0.883390082469,-1.00078978014, --0.883390082469,0.918032830801,-1.03597674345, --0.883390082469,0.952675579133,-1.07119926783, --0.883390082469,0.987318327465,-1.10642989941, --0.883390082469,1.0219610758,-1.14169248051, --0.883390082469,1.05660382413,-1.17697546568, --0.883390082469,1.09124657246,-1.21228126347, --0.883390082469,1.12588932079,-1.24760068854, --0.883390082469,1.16053206913,-1.2829435298, --0.883390082469,1.19517481746,-1.31830436611, --0.883390082469,1.22981756579,-1.35368388531, --0.883390082469,1.26446031412,-1.38907653415, --0.883390082469,1.29910306245,-1.42448353742, --0.883390082469,1.33374581079,-1.45989903265, --0.883390082469,1.36838855912,-1.49533398383, --0.883390082469,1.40303130745,-1.53078418549, --0.883390082469,1.43767405578,-1.56623487859, --0.883390082469,1.47231680411,-1.60169834865, --0.883390082469,1.50695955245,-1.63717506311, --0.883390082469,1.54160230078,-1.67021463635, --0.883390082469,1.57624504911,-1.70570645627, --0.883390082469,1.61088779744,-1.741204218, --0.883390082469,1.64553054577,-1.77672485017, --0.883390082469,1.68017329411,-1.81227362007, --0.883390082469,1.71481604244,-1.84782144322, --0.848747334136,-1.71481604244,1.25267775564, --0.848747334136,-1.68017329411,1.24014708048, --0.848747334136,-1.64553054577,1.22497666329, --0.848747334136,-1.61088779744,1.20768085712, --0.848747334136,-1.57624504911,1.18866077935, --0.848747334136,-1.54160230078,1.16811953551, --0.848747334136,-1.50695955245,1.14632368204, --0.848747334136,-1.47231680411,1.12342454252, --0.848747334136,-1.43767405578,1.09956740826, --0.848747334136,-1.40303130745,1.0748694381, --0.848747334136,-1.36838855912,1.04940150996, --0.848747334136,-1.33374581079,1.02323950507, --0.848747334136,-1.29910306245,1.00043603721, --0.848747334136,-1.26446031412,0.990770795359, --0.848747334136,-1.22981756579,0.977344498937, --0.848747334136,-1.19517481746,0.960908489172, --0.848747334136,-1.16053206913,0.942026313343, --0.848747334136,-1.12588932079,0.921138344225, --0.848747334136,-1.09124657246,0.898552958419, --0.848747334136,-1.05660382413,0.874556648811, --0.848747334136,-1.0219610758,0.849337383216, --0.848747334136,-0.987318327465,0.823078282726, --0.848747334136,-0.952675579133,0.794308574357, --0.848747334136,-0.918032830801,0.76373127703, --0.848747334136,-0.883390082469,0.732931184702, --0.848747334136,-0.848747334136,0.701918076194, --0.848747334136,-0.814104585804,0.670715967026, --0.848747334136,-0.779461837472,0.639325588515, --0.848747334136,-0.74481908914,0.607769415204, --0.848747334136,-0.710176340808,0.57603758542, --0.848747334136,-0.675533592476,0.544155241093, --0.848747334136,-0.640890844144,0.512120437129, --0.848747334136,-0.606248095812,0.479950468058, --0.848747334136,-0.57160534748,0.44765314558, --0.848747334136,-0.536962599148,0.415235371068, --0.848747334136,-0.502319850815,0.382707916471, --0.848747334136,-0.467677102483,0.350092900764, --0.848747334136,-0.433034354151,0.317442886147, --0.848747334136,-0.398391605819,0.28687751772, --0.848747334136,-0.363748857487,0.253895371685, --0.848747334136,-0.329106109155,0.22075315836, --0.848747334136,-0.294463360823,0.187483106027, --0.848747334136,-0.259820612491,0.154096164536, --0.848747334136,-0.225177864159,0.120612920959, --0.848747334136,-0.190535115827,0.0870314065885, --0.848747334136,-0.155892367494,0.0533616675665, --0.848747334136,-0.121249619162,0.019604484167, --0.848747334136,-0.0866068708302,-0.0142279146165, --0.848747334136,-0.0519641224981,-0.0481327919712, --0.848747334136,-0.017321374166,-0.0821260829001, --0.848747334136,0.017321374166,-0.116188957563, --0.848747334136,0.0519641224981,-0.150303882342, --0.848747334136,0.0866068708302,-0.184249644146, --0.848747334136,0.121249619162,-0.218572009923, --0.848747334136,0.155892367494,-0.252949608854, --0.848747334136,0.190535115827,-0.287371765449, --0.848747334136,0.225177864159,-0.321844287467, --0.848747334136,0.259820612491,-0.356362546953, --0.848747334136,0.294463360823,-0.390921893149, --0.848747334136,0.329106109155,-0.425519874893, --0.848747334136,0.363748857487,-0.460167667099, --0.848747334136,0.398391605819,-0.494849804351, --0.848747334136,0.433034354151,-0.529563951794, --0.848747334136,0.467677102483,-0.564329400279, --0.848747334136,0.502319850815,-0.599105989008, --0.848747334136,0.536962599148,-0.633931792432, --0.848747334136,0.57160534748,-0.668782876596, --0.848747334136,0.606248095812,-0.70366572807, --0.848747334136,0.640890844144,-0.738575832674, --0.848747334136,0.675533592476,-0.773509156491, --0.848747334136,0.710176340808,-0.808468621431, --0.848747334136,0.74481908914,-0.843524494126, --0.848747334136,0.779461837472,-0.878667888489, --0.848747334136,0.814104585804,-0.91382188641, --0.848747334136,0.848747334136,-0.948969360265, --0.848747334136,0.883390082469,-0.984142086164, --0.848747334136,0.918032830801,-1.01934695437, --0.848747334136,0.952675579133,-1.05457367826, --0.848747334136,0.987318327465,-1.08983403553, --0.848747334136,1.0219610758,-1.12510775926, --0.848747334136,1.05660382413,-1.1604091822, --0.848747334136,1.09124657246,-1.19572788065, --0.848747334136,1.12588932079,-1.23106992607, --0.848747334136,1.16053206913,-1.26642897534, --0.848747334136,1.19517481746,-1.30180432281, --0.848747334136,1.22981756579,-1.33720428027, --0.848747334136,1.26446031412,-1.37261427783, --0.848747334136,1.29910306245,-1.40803848501, --0.848747334136,1.33374581079,-1.44348623033, --0.848747334136,1.36838855912,-1.47893985327, --0.848747334136,1.40303130745,-1.5144180831, --0.848747334136,1.43767405578,-1.54989084205, --0.848747334136,1.47231680411,-1.58538241531, --0.848747334136,1.50695955245,-1.62088481025, --0.848747334136,1.54160230078,-1.65639890351, --0.848747334136,1.57624504911,-1.69192106582, --0.848747334136,1.61088779744,-1.72744862079, --0.848747334136,1.64553054577,-1.76298564155, --0.848747334136,1.68017329411,-1.79852783566, --0.848747334136,1.71481604244,-1.83407036226, --0.814104585804,-1.71481604244,1.26712174946, --0.814104585804,-1.68017329411,1.25461303947, --0.814104585804,-1.64553054577,1.23945564751, --0.814104585804,-1.61088779744,1.22217080778, --0.814104585804,-1.57624504911,1.20313366437, --0.814104585804,-1.54160230078,1.1825735916, --0.814104585804,-1.50695955245,1.16078797331, --0.814104585804,-1.47231680411,1.13786771504, --0.814104585804,-1.43767405578,1.11401730822, --0.814104585804,-1.40303130745,1.08929994569, --0.814104585804,-1.36838855912,1.06380793741, --0.814104585804,-1.33374581079,1.03765675761, --0.814104585804,-1.29910306245,1.01623196114, --0.814104585804,-1.26446031412,1.00657578826, --0.814104585804,-1.22981756579,0.993156538048, --0.814104585804,-1.19517481746,0.976727183007, --0.814104585804,-1.16053206913,0.957855430204, --0.814104585804,-1.12588932079,0.936964970071, --0.814104585804,-1.09124657246,0.914379762945, --0.814104585804,-1.05660382413,0.890390702788, --0.814104585804,-1.0219610758,0.865173847185, --0.814104585804,-0.987318327465,0.838906495459, --0.814104585804,-0.952675579133,0.809193864364, --0.814104585804,-0.918032830801,0.778635638358, --0.814104585804,-0.883390082469,0.747852876688, --0.814104585804,-0.848747334136,0.716862085477, --0.814104585804,-0.814104585804,0.685673548141, --0.814104585804,-0.779461837472,0.654295698875, --0.814104585804,-0.74481908914,0.622741415535, --0.814104585804,-0.710176340808,0.591018322536, --0.814104585804,-0.675533592476,0.559131788995, --0.814104585804,-0.640890844144,0.52709962428, --0.814104585804,-0.606248095812,0.494910038534, --0.814104585804,-0.57160534748,0.462584468464, --0.814104585804,-0.536962599148,0.43013434057, --0.814104585804,-0.502319850815,0.397553918977, --0.814104585804,-0.467677102483,0.364842694185, --0.814104585804,-0.433034354151,0.332017017328, --0.814104585804,-0.398391605819,0.299087606832, --0.814104585804,-0.363748857487,0.266045383833, --0.814104585804,-0.329106109155,0.232903602369, --0.814104585804,-0.294463360823,0.199657799701, --0.814104585804,-0.259820612491,0.166321387038, --0.814104585804,-0.225177864159,0.132888343124, --0.814104585804,-0.190535115827,0.0993729212145, --0.814104585804,-0.155892367494,0.0657729268347, --0.814104585804,-0.121249619162,0.0320906383531, --0.814104585804,-0.0866068708302,-0.00167054840371, --0.814104585804,-0.0519641224981,-0.0355089412429, --0.814104585804,-0.017321374166,-0.0694219746548, --0.814104585804,0.017321374166,-0.102879873047, --0.814104585804,0.0519641224981,-0.13699578205, --0.814104585804,0.0866068708302,-0.168317409273, --0.814104585804,0.121249619162,-0.202626505348, --0.814104585804,0.155892367494,-0.236994763949, --0.814104585804,0.190535115827,-0.271415225721, --0.814104585804,0.225177864159,-0.305886461115, --0.814104585804,0.259820612491,-0.340407759212, --0.814104585804,0.294463360823,-0.37496575507, --0.814104585804,0.329106109155,-0.409574222445, --0.814104585804,0.363748857487,-0.444226258268, --0.814104585804,0.398391605819,-0.478914333009, --0.814104585804,0.433034354151,-0.513641635113, --0.814104585804,0.467677102483,-0.548407366358, --0.814104585804,0.502319850815,-0.583212811805, --0.814104585804,0.536962599148,-0.618043795803, --0.814104585804,0.57160534748,-0.652911496854, --0.814104585804,0.606248095812,-0.687807016902, --0.814104585804,0.640890844144,-0.72273427903, --0.814104585804,0.675533592476,-0.757684938915, --0.814104585804,0.710176340808,-0.792666458451, --0.814104585804,0.74481908914,-0.827668567832, --0.814104585804,0.779461837472,-0.862691124831, --0.814104585804,0.814104585804,-0.897745657529, --0.814104585804,0.848747334136,-0.932860332867, --0.814104585804,0.883390082469,-0.968093031535, --0.814104585804,0.918032830801,-1.00334522191, --0.814104585804,0.952675579133,-1.03859231844, --0.814104585804,0.987318327465,-1.07386280353, --0.814104585804,1.0219610758,-1.10915448862, --0.814104585804,1.05660382413,-1.14446566029, --0.814104585804,1.09124657246,-1.17979929083, --0.814104585804,1.12588932079,-1.21515606418, --0.814104585804,1.16053206913,-1.25053065128, --0.814104585804,1.19517481746,-1.28592616512, --0.814104585804,1.22981756579,-1.32133567495, --0.814104585804,1.26446031412,-1.35676389417, --0.814104585804,1.29910306245,-1.39221076088, --0.814104585804,1.33374581079,-1.42767314073, --0.814104585804,1.36838855912,-1.46314736958, --0.814104585804,1.40303130745,-1.49864581868, --0.814104585804,1.43767405578,-1.53414333523, --0.814104585804,1.47231680411,-1.56965480923, --0.814104585804,1.50695955245,-1.60518224359, --0.814104585804,1.54160230078,-1.64071815635, --0.814104585804,1.57624504911,-1.67626409428, --0.814104585804,1.61088779744,-1.7118193923, --0.814104585804,1.64553054577,-1.74738319391, --0.814104585804,1.68017329411,-1.7829499169, --0.814104585804,1.71481604244,-1.81852534979, --0.779461837472,-1.71481604244,1.28107760536, --0.779461837472,-1.68017329411,1.26857308909, --0.779461837472,-1.64553054577,1.2533993352, --0.779461837472,-1.61088779744,1.23612785769, --0.779461837472,-1.57624504911,1.21706564764, --0.779461837472,-1.54160230078,1.19651486072, --0.779461837472,-1.50695955245,1.17470834204, --0.779461837472,-1.47231680411,1.15179902884, --0.779461837472,-1.43767405578,1.12792833401, --0.779461837472,-1.40303130745,1.10318260048, --0.779461837472,-1.36838855912,1.07769964712, --0.779461837472,-1.33374581079,1.05155587946, --0.779461837472,-1.29910306245,1.03144034086, --0.779461837472,-1.26446031412,1.02179256287, --0.779461837472,-1.22981756579,1.00838203531, --0.779461837472,-1.19517481746,0.991951882076, --0.779461837472,-1.16053206913,0.97308402888, --0.779461837472,-1.12588932079,0.952194815055, --0.779461837472,-1.09124657246,0.929622441308, --0.779461837472,-1.05660382413,0.905628194055, --0.779461837472,-1.0219610758,0.880406732172, --0.779461837472,-0.987318327465,0.853935758197, --0.779461837472,-0.952675579133,0.82364032107, --0.779461837472,-0.918032830801,0.79311525348, --0.779461837472,-0.883390082469,0.762357285514, --0.779461837472,-0.848747334136,0.731394485463, --0.779461837472,-0.814104585804,0.700232680017, --0.779461837472,-0.779461837472,0.668884320016, --0.779461837472,-0.74481908914,0.637357118407, --0.779461837472,-0.710176340808,0.60565781545, --0.779461837472,-0.675533592476,0.573800742407, --0.779461837472,-0.640890844144,0.541788721649, --0.779461837472,-0.606248095812,0.50962687515, --0.779461837472,-0.57160534748,0.47733498006, --0.779461837472,-0.536962599148,0.444900821286, --0.779461837472,-0.502319850815,0.412335697824, --0.779461837472,-0.467677102483,0.379660077828, --0.779461837472,-0.433034354151,0.346858688909, --0.779461837472,-0.398391605819,0.313930965211, --0.779461837472,-0.363748857487,0.280907638844, --0.779461837472,-0.329106109155,0.247779308083, --0.779461837472,-0.294463360823,0.214549205641, --0.779461837472,-0.259820612491,0.181222768364, --0.779461837472,-0.225177864159,0.147803723996, --0.779461837472,-0.190535115827,0.114292099078, --0.779461837472,-0.155892367494,0.0806971075673, --0.779461837472,-0.121249619162,0.0470207000988, --0.779461837472,-0.0866068708302,0.013261259768, --0.779461837472,-0.0519641224981,-0.0205681744359, --0.779461837472,-0.017321374166,-0.0544854067588, --0.779461837472,0.017321374166,-0.0877972767177, --0.779461837472,0.0519641224981,-0.121945685458, --0.779461837472,0.0866068708302,-0.15615584399, --0.779461837472,0.121249619162,-0.190421366444, --0.779461837472,0.155892367494,-0.224744870369, --0.779461837472,0.190535115827,-0.259120981928, --0.779461837472,0.225177864159,-0.29354952236, --0.779461837472,0.259820612491,-0.328023287492, --0.779461837472,0.294463360823,-0.362542391491, --0.779461837472,0.329106109155,-0.397104735814, --0.779461837472,0.363748857487,-0.431714060569, --0.779461837472,0.398391605819,-0.466354713521, --0.779461837472,0.433034354151,-0.501014712073, --0.779461837472,0.467677102483,-0.535709800727, --0.779461837472,0.502319850815,-0.570351281031, --0.779461837472,0.536962599148,-0.602818039144, --0.779461837472,0.57160534748,-0.637678635886, --0.779461837472,0.606248095812,-0.672578529863, --0.779461837472,0.640890844144,-0.707512914614, --0.779461837472,0.675533592476,-0.742474411125, --0.779461837472,0.710176340808,-0.777469034825, --0.779461837472,0.74481908914,-0.812486234664, --0.779461837472,0.779461837472,-0.847528476354, --0.779461837472,0.814104585804,-0.882589471414, --0.779461837472,0.848747334136,-0.917673702936, --0.779461837472,0.883390082469,-0.952784580031, --0.779461837472,0.918032830801,-0.987901194184, --0.779461837472,0.952675579133,-1.02311283021, --0.779461837472,0.987318327465,-1.05843900018, --0.779461837472,1.0219610758,-1.09377210289, --0.779461837472,1.05660382413,-1.12910980192, --0.779461837472,1.09124657246,-1.16445500678, --0.779461837472,1.12588932079,-1.19982453901, --0.779461837472,1.16053206913,-1.23521093641, --0.779461837472,1.19517481746,-1.27062103701, --0.779461837472,1.22981756579,-1.30604956709, --0.779461837472,1.26446031412,-1.34149136975, --0.779461837472,1.29910306245,-1.37695740363, --0.779461837472,1.33374581079,-1.41243116075, --0.779461837472,1.36838855912,-1.44792941606, --0.779461837472,1.40303130745,-1.48342885788, --0.779461837472,1.43767405578,-1.51895305103, --0.779461837472,1.47231680411,-1.55448646608, --0.779461837472,1.50695955245,-1.5900346974, --0.779461837472,1.54160230078,-1.62559080741, --0.779461837472,1.57624504911,-1.66115809533, --0.779461837472,1.61088779744,-1.6967375365, --0.779461837472,1.64553054577,-1.73231957142, --0.779461837472,1.68017329411,-1.76791550276, --0.779461837472,1.71481604244,-1.80351444252, --0.74481908914,-1.71481604244,1.29451307524, --0.74481908914,-1.68017329411,1.28201251189, --0.74481908914,-1.64553054577,1.26684599919, --0.74481908914,-1.61088779744,1.24955523739, --0.74481908914,-1.57624504911,1.23046978987, --0.74481908914,-1.54160230078,1.20992721345, --0.74481908914,-1.50695955245,1.18813258933, --0.74481908914,-1.47231680411,1.16519586871, --0.74481908914,-1.43767405578,1.14133426833, --0.74481908914,-1.40303130745,1.11660169643, --0.74481908914,-1.36838855912,1.09112274126, --0.74481908914,-1.33374581079,1.06495284555, --0.74481908914,-1.29910306245,1.04610299943, --0.74481908914,-1.26446031412,1.0364630142, --0.74481908914,-1.22981756579,1.02305592125, --0.74481908914,-1.19517481746,1.00663270001, --0.74481908914,-1.16053206913,0.987764204354, --0.74481908914,-1.12588932079,0.966880057126, --0.74481908914,-1.09124657246,0.944302518283, --0.74481908914,-1.05660382413,0.920312544829, --0.74481908914,-1.0219610758,0.895093242726, --0.74481908914,-0.987318327465,0.867885144893, --0.74481908914,-0.952675579133,0.837617291467, --0.74481908914,-0.918032830801,0.807111392994, --0.74481908914,-0.883390082469,0.776385177394, --0.74481908914,-0.848747334136,0.74544782585, --0.74481908914,-0.814104585804,0.714315882266, --0.74481908914,-0.779461837472,0.682995860295, --0.74481908914,-0.74481908914,0.651494594515, --0.74481908914,-0.710176340808,0.619824571892, --0.74481908914,-0.675533592476,0.587996181377, --0.74481908914,-0.640890844144,0.556011063469, --0.74481908914,-0.606248095812,0.52387891834, --0.74481908914,-0.57160534748,0.491608623296, --0.74481908914,-0.536962599148,0.459204961926, --0.74481908914,-0.502319850815,0.426672567259, --0.74481908914,-0.467677102483,0.394008777836, --0.74481908914,-0.433034354151,0.361237457623, --0.74481908914,-0.398391605819,0.328337366351, --0.74481908914,-0.363748857487,0.29534188044, --0.74481908914,-0.329106109155,0.262237025282, --0.74481908914,-0.294463360823,0.229031539622, --0.74481908914,-0.259820612491,0.195721652129, --0.74481908914,-0.225177864159,0.162324607965, --0.74481908914,-0.190535115827,0.128837166026, --0.74481908914,-0.155892367494,0.0952613010717, --0.74481908914,-0.121249619162,0.0615968639144, --0.74481908914,-0.0866068708302,0.027862481209, --0.74481908914,-0.0519641224981,-0.00595935130291, --0.74481908914,-0.017321374166,-0.0398533358582, --0.74481908914,0.017321374166,-0.073042182293, --0.74481908914,0.0519641224981,-0.107191064082, --0.74481908914,0.0866068708302,-0.141399605629, --0.74481908914,0.121249619162,-0.175669669062, --0.74481908914,0.155892367494,-0.209995620337, --0.74481908914,0.190535115827,-0.244379426225, --0.74481908914,0.225177864159,-0.278816883596, --0.74481908914,0.259820612491,-0.313304217656, --0.74481908914,0.294463360823,-0.347845425809, --0.74481908914,0.329106109155,-0.382427064948, --0.74481908914,0.363748857487,-0.417063225385, --0.74481908914,0.398391605819,-0.451737428695, --0.74481908914,0.433034354151,-0.486461582338, --0.74481908914,0.467677102483,-0.521226552675, --0.74481908914,0.502319850815,-0.556014295064, --0.74481908914,0.536962599148,-0.590862772338, --0.74481908914,0.57160534748,-0.625738479284, --0.74481908914,0.606248095812,-0.660649517067, --0.74481908914,0.640890844144,-0.695593956525, --0.74481908914,0.675533592476,-0.72792280275, --0.74481908914,0.710176340808,-0.762896795963, --0.74481908914,0.74481908914,-0.797907712043, --0.74481908914,0.779461837472,-0.832949539357, --0.74481908914,0.814104585804,-0.868015609609, --0.74481908914,0.848747334136,-0.903107119088, --0.74481908914,0.883390082469,-0.938227967999, --0.74481908914,0.918032830801,-0.973364780316, --0.74481908914,0.952675579133,-1.0085105902, --0.74481908914,0.987318327465,-1.04368137077, --0.74481908914,1.0219610758,-1.07887139344, --0.74481908914,1.05660382413,-1.11422393918, --0.74481908914,1.09124657246,-1.14961648935, --0.74481908914,1.12588932079,-1.18503201842, --0.74481908914,1.16053206913,-1.22043906428, --0.74481908914,1.19517481746,-1.25586078815, --0.74481908914,1.22981756579,-1.29129980928, --0.74481908914,1.26446031412,-1.32675733481, --0.74481908914,1.29910306245,-1.36223116438, --0.74481908914,1.33374581079,-1.39772204529, --0.74481908914,1.36838855912,-1.43323489646, --0.74481908914,1.40303130745,-1.46876047484, --0.74481908914,1.43767405578,-1.50429433469, --0.74481908914,1.47231680411,-1.5398551271, --0.74481908914,1.50695955245,-1.57541125114, --0.74481908914,1.54160230078,-1.61098702859, --0.74481908914,1.57624504911,-1.6465746632, --0.74481908914,1.61088779744,-1.68217240826, --0.74481908914,1.64553054577,-1.71778109258, --0.74481908914,1.68017329411,-1.75339606929, --0.74481908914,1.71481604244,-1.78901884356, --0.710176340808,-1.71481604244,1.30745237952, --0.710176340808,-1.68017329411,1.29497682999, --0.710176340808,-1.64553054577,1.27980583091, --0.710176340808,-1.61088779744,1.26252320648, --0.710176340808,-1.57624504911,1.24344768462, --0.710176340808,-1.54160230078,1.22288693736, --0.710176340808,-1.50695955245,1.20106403765, --0.710176340808,-1.47231680411,1.17813490786, --0.710176340808,-1.43767405578,1.1542488237, --0.710176340808,-1.40303130745,1.1295214814, --0.710176340808,-1.36838855912,1.10405112125, --0.710176340808,-1.33374581079,1.07788492832, --0.710176340808,-1.29910306245,1.06025747931, --0.710176340808,-1.26446031412,1.05061902114, --0.710176340808,-1.22981756579,1.03721680883, --0.710176340808,-1.19517481746,1.02080005753, --0.710176340808,-1.16053206913,1.00193390224, --0.710176340808,-1.12588932079,0.981057859184, --0.710176340808,-1.09124657246,0.95847875084, --0.710176340808,-1.05660382413,0.934492745713, --0.710176340808,-1.0219610758,0.909270878924, --0.710176340808,-0.987318327465,0.881372140499, --0.710176340808,-0.952675579133,0.851121886657, --0.710176340808,-0.918032830801,0.820654285724, --0.710176340808,-0.883390082469,0.789946625238, --0.710176340808,-0.848747334136,0.759036649872, --0.710176340808,-0.814104585804,0.7279345055, --0.710176340808,-0.779461837472,0.696635593961, --0.710176340808,-0.74481908914,0.665162961175, --0.710176340808,-0.710176340808,0.633523229607, --0.710176340808,-0.675533592476,0.601718883547, --0.710176340808,-0.640890844144,0.569761479066, --0.710176340808,-0.606248095812,0.537655145518, --0.710176340808,-0.57160534748,0.505415599639, --0.710176340808,-0.536962599148,0.473031283063, --0.710176340808,-0.502319850815,0.440526993802, --0.710176340808,-0.467677102483,0.407886472355, --0.710176340808,-0.433034354151,0.375144890826, --0.710176340808,-0.398391605819,0.342276244903, --0.710176340808,-0.363748857487,0.309302520566, --0.710176340808,-0.329106109155,0.276220656269, --0.710176340808,-0.294463360823,0.243037328259, --0.710176340808,-0.259820612491,0.209756629105, --0.710176340808,-0.225177864159,0.176379161843, --0.710176340808,-0.190535115827,0.142912544014, --0.710176340808,-0.155892367494,0.109354839169, --0.710176340808,-0.121249619162,0.075714850122, --0.710176340808,-0.0866068708302,0.0419967678951, --0.710176340808,-0.0519641224981,0.00818667804952, --0.710176340808,-0.017321374166,-0.0256852965773, --0.710176340808,0.017321374166,-0.058743031745, --0.710176340808,0.0519641224981,-0.0928890977005, --0.710176340808,0.0866068708302,-0.127087108983, --0.710176340808,0.121249619162,-0.161360183633, --0.710176340808,0.155892367494,-0.195684327171, --0.710176340808,0.190535115827,-0.230066062877, --0.710176340808,0.225177864159,-0.264499537386, --0.710176340808,0.259820612491,-0.29898863646, --0.710176340808,0.294463360823,-0.33352876321, --0.710176340808,0.329106109155,-0.368119676941, --0.710176340808,0.363748857487,-0.402752755825, --0.710176340808,0.398391605819,-0.437432463056, --0.710176340808,0.433034354151,-0.472160342141, --0.710176340808,0.467677102483,-0.506925433479, --0.710176340808,0.502319850815,-0.541737925459, --0.710176340808,0.536962599148,-0.576592517228, --0.710176340808,0.57160534748,-0.611481360749, --0.710176340808,0.606248095812,-0.646409398591, --0.710176340808,0.640890844144,-0.681370939489, --0.710176340808,0.675533592476,-0.716369751858, --0.710176340808,0.710176340808,-0.751397615325, --0.710176340808,0.74481908914,-0.786459999061, --0.710176340808,0.779461837472,-0.821552310859, --0.710176340808,0.814104585804,-0.856678826698, --0.710176340808,0.848747334136,-0.889197920994, --0.710176340808,0.883390082469,-0.924267093307, --0.710176340808,0.918032830801,-0.959384378054, --0.710176340808,0.952675579133,-0.994545507536, --0.710176340808,0.987318327465,-1.02971257403, --0.710176340808,1.0219610758,-1.06491331357, --0.710176340808,1.05660382413,-1.10011566486, --0.710176340808,1.09124657246,-1.13533798014, --0.710176340808,1.12588932079,-1.17067762445, --0.710176340808,1.16053206913,-1.20611927046, --0.710176340808,1.19517481746,-1.24158082956, --0.710176340808,1.22981756579,-1.27706240703, --0.710176340808,1.26446031412,-1.31253277761, --0.710176340808,1.29910306245,-1.34802219159, --0.710176340808,1.33374581079,-1.38352046887, --0.710176340808,1.36838855912,-1.41904201617, --0.710176340808,1.40303130745,-1.45458930811, --0.710176340808,1.43767405578,-1.49013237744, --0.710176340808,1.47231680411,-1.52569639057, --0.710176340808,1.50695955245,-1.56128504862, --0.710176340808,1.54160230078,-1.59687853637, --0.710176340808,1.57624504911,-1.63248019513, --0.710176340808,1.61088779744,-1.66809521801, --0.710176340808,1.64553054577,-1.70371969652, --0.710176340808,1.68017329411,-1.73935902161, --0.710176340808,1.71481604244,-1.77499926356, --0.675533592476,-1.71481604244,1.31997954749, --0.675533592476,-1.68017329411,1.30750077171, --0.675533592476,-1.64553054577,1.29235213051, --0.675533592476,-1.61088779744,1.27503534036, --0.675533592476,-1.57624504911,1.25597554721, --0.675533592476,-1.54160230078,1.23541795472, --0.675533592476,-1.50695955245,1.21357142481, --0.675533592476,-1.47231680411,1.19065372354, --0.675533592476,-1.43767405578,1.16677439401, --0.675533592476,-1.40303130745,1.14201760468, --0.675533592476,-1.36838855912,1.11652311155, --0.675533592476,-1.33374581079,1.09036641022, --0.675533592476,-1.29910306245,1.07393249944, --0.675533592476,-1.26446031412,1.06430093337, --0.675533592476,-1.22981756579,1.05090510765, --0.675533592476,-1.19517481746,1.03449489097, --0.675533592476,-1.16053206913,1.01562727901, --0.675533592476,-1.12588932079,0.994746664307, --0.675533592476,-1.09124657246,0.972175565615, --0.675533592476,-1.05660382413,0.948182706498, --0.675533592476,-1.0219610758,0.922973440843, --0.675533592476,-0.987318327465,0.894426324846, --0.675533592476,-0.952675579133,0.864199749381, --0.675533592476,-0.918032830801,0.833749818694, --0.675533592476,-0.883390082469,0.803075374175, --0.675533592476,-0.848747334136,0.77218577963, --0.675533592476,-0.814104585804,0.741101908905, --0.675533592476,-0.779461837472,0.709833880274, --0.675533592476,-0.74481908914,0.67838831528, --0.675533592476,-0.710176340808,0.646770511196, --0.675533592476,-0.675533592476,0.614993951797, --0.675533592476,-0.640890844144,0.583058163645, --0.675533592476,-0.606248095812,0.550985795308, --0.675533592476,-0.57160534748,0.518768481329, --0.675533592476,-0.536962599148,0.4864100728, --0.675533592476,-0.502319850815,0.453929941488, --0.675533592476,-0.467677102483,0.421321850909, --0.675533592476,-0.433034354151,0.388594550521, --0.675533592476,-0.398391605819,0.35575936902, --0.675533592476,-0.363748857487,0.32280366274, --0.675533592476,-0.329106109155,0.28974655165, --0.675533592476,-0.294463360823,0.256586813535, --0.675533592476,-0.259820612491,0.223330286372, --0.675533592476,-0.225177864159,0.18997403687, --0.675533592476,-0.190535115827,0.15652649888, --0.675533592476,-0.155892367494,0.122988210641, --0.675533592476,-0.121249619162,0.0893665011015, --0.675533592476,-0.0866068708302,0.0556670563664, --0.675533592476,-0.0519641224981,0.0218860677646, --0.675533592476,-0.017321374166,-0.0119775321689, --0.675533592476,0.017321374166,-0.0449151000671, --0.675533592476,0.0519641224981,-0.0790476567491, --0.675533592476,0.0866068708302,-0.11324600358, --0.675533592476,0.121249619162,-0.147506482054, --0.675533592476,0.155892367494,-0.181826616865, --0.675533592476,0.190535115827,-0.216201900383, --0.675533592476,0.225177864159,-0.250635123273, --0.675533592476,0.259820612491,-0.285122019779, --0.675533592476,0.294463360823,-0.319658052653, --0.675533592476,0.329106109155,-0.354246269208, --0.675533592476,0.363748857487,-0.388879019849, --0.675533592476,0.398391605819,-0.423559593522, --0.675533592476,0.433034354151,-0.458293062476, --0.675533592476,0.467677102483,-0.493056014214, --0.675533592476,0.502319850815,-0.52787708072, --0.675533592476,0.536962599148,-0.562720614421, --0.675533592476,0.57160534748,-0.597624452235, --0.675533592476,0.606248095812,-0.632551885756, --0.675533592476,0.640890844144,-0.667520491284, --0.675533592476,0.675533592476,-0.702522079956, --0.675533592476,0.710176340808,-0.737562433118, --0.675533592476,0.74481908914,-0.772632425754, --0.675533592476,0.779461837472,-0.807733682377, --0.675533592476,0.814104585804,-0.842865869265, --0.675533592476,0.848747334136,-0.878031927036, --0.675533592476,0.883390082469,-0.913222277784, --0.675533592476,0.918032830801,-0.948442666077, --0.675533592476,0.952675579133,-0.983685209608, --0.675533592476,0.987318327465,-1.01895866822, --0.675533592476,1.0219610758,-1.05425948664, --0.675533592476,1.05660382413,-1.08958108502, --0.675533592476,1.09124657246,-1.12191666233, --0.675533592476,1.12588932079,-1.15714988915, --0.675533592476,1.16053206913,-1.1923974044, --0.675533592476,1.19517481746,-1.22774481079, --0.675533592476,1.22981756579,-1.26323599619, --0.675533592476,1.26446031412,-1.29874709174, --0.675533592476,1.29910306245,-1.33427325674, --0.675533592476,1.33374581079,-1.36979304504, --0.675533592476,1.36838855912,-1.4053288807, --0.675533592476,1.40303130745,-1.44088372116, --0.675533592476,1.43767405578,-1.47645038195, --0.675533592476,1.47231680411,-1.51202026685, --0.675533592476,1.50695955245,-1.54762203926, --0.675533592476,1.54160230078,-1.58322861754, --0.675533592476,1.57624504911,-1.61885007304, --0.675533592476,1.61088779744,-1.65447900808, --0.675533592476,1.64553054577,-1.69012379457, --0.675533592476,1.68017329411,-1.72577460946, --0.675533592476,1.71481604244,-1.7614330696, --0.640890844144,-1.71481604244,1.33212068031, --0.640890844144,-1.68017329411,1.31961523468, --0.640890844144,-1.64553054577,1.30447839905, --0.640890844144,-1.61088779744,1.28717691861, --0.640890844144,-1.57624504911,1.26812310872, --0.640890844144,-1.54160230078,1.2475318103, --0.640890844144,-1.50695955245,1.22569262633, --0.640890844144,-1.47231680411,1.20277982755, --0.640890844144,-1.43767405578,1.17887234437, --0.640890844144,-1.40303130745,1.15412170768, --0.640890844144,-1.36838855912,1.12863491446, --0.640890844144,-1.33374581079,1.10245228526, --0.640890844144,-1.29910306245,1.08716438399, --0.640890844144,-1.26446031412,1.07754428106, --0.640890844144,-1.22981756579,1.06415101798, --0.640890844144,-1.19517481746,1.04773573255, --0.640890844144,-1.16053206913,1.02887518811, --0.640890844144,-1.12588932079,1.00800087659, --0.640890844144,-1.09124657246,0.985424363088, --0.640890844144,-1.05660382413,0.961442524256, --0.640890844144,-1.0219610758,0.936221429666, --0.640890844144,-0.987318327465,0.907062912537, --0.640890844144,-0.952675579133,0.876863022592, --0.640890844144,-0.918032830801,0.846427157644, --0.640890844144,-0.883390082469,0.815772288957, --0.640890844144,-0.848747334136,0.784918478001, --0.640890844144,-0.814104585804,0.753862384815, --0.640890844144,-0.779461837472,0.722612481268, --0.640890844144,-0.74481908914,0.691194942265, --0.640890844144,-0.710176340808,0.659599372974, --0.640890844144,-0.675533592476,0.627849574656, --0.640890844144,-0.640890844144,0.595941052242, --0.640890844144,-0.606248095812,0.563885729109, --0.640890844144,-0.57160534748,0.531688752575, --0.640890844144,-0.536962599148,0.49936020258, --0.640890844144,-0.502319850815,0.466899338634, --0.640890844144,-0.467677102483,0.43431725187, --0.640890844144,-0.433034354151,0.401615407072, --0.640890844144,-0.398391605819,0.368798611652, --0.640890844144,-0.363748857487,0.335864554581, --0.640890844144,-0.329106109155,0.302838633098, --0.640890844144,-0.294463360823,0.269700003505, --0.640890844144,-0.259820612491,0.236461954387, --0.640890844144,-0.225177864159,0.203130172624, --0.640890844144,-0.190535115827,0.169703240319, --0.640890844144,-0.155892367494,0.136189686333, --0.640890844144,-0.121249619162,0.102587245456, --0.640890844144,-0.0866068708302,0.0689020852111, --0.640890844144,-0.0519641224981,0.0351299079424, --0.640890844144,-0.017321374166,0.00128764709125, --0.640890844144,0.017321374166,-0.031529331609, --0.640890844144,0.0519641224981,-0.0656538428673, --0.640890844144,0.0866068708302,-0.0998389500134, --0.640890844144,0.121249619162,-0.134092411568, --0.640890844144,0.155892367494,-0.168410931047, --0.640890844144,0.190535115827,-0.202781599556, --0.640890844144,0.225177864159,-0.237208067869, --0.640890844144,0.259820612491,-0.271691371578, --0.640890844144,0.294463360823,-0.306223053226, --0.640890844144,0.329106109155,-0.340806889137, --0.640890844144,0.363748857487,-0.375439141491, --0.640890844144,0.398391605819,-0.410120432083, --0.640890844144,0.433034354151,-0.444847003149, --0.640890844144,0.467677102483,-0.47961855174, --0.640890844144,0.502319850815,-0.514426138161, --0.640890844144,0.536962599148,-0.549293028391, --0.640890844144,0.57160534748,-0.584173867645, --0.640890844144,0.606248095812,-0.619114212573, --0.640890844144,0.640890844144,-0.654083303249, --0.640890844144,0.675533592476,-0.689092888972, --0.640890844144,0.710176340808,-0.724132259991, --0.640890844144,0.74481908914,-0.75920905008, --0.640890844144,0.779461837472,-0.794314821579, --0.640890844144,0.814104585804,-0.829452242699, --0.640890844144,0.848747334136,-0.864624339789, --0.640890844144,0.883390082469,-0.89982152112, --0.640890844144,0.918032830801,-0.935053956912, --0.640890844144,0.952675579133,-0.970302456279, --0.640890844144,0.987318327465,-1.00558435666, --0.640890844144,1.0219610758,-1.0408959889, --0.640890844144,1.05660382413,-1.07622810993, --0.640890844144,1.09124657246,-1.1115826945, --0.640890844144,1.12588932079,-1.14696198796, --0.640890844144,1.16053206913,-1.18236403328, --0.640890844144,1.19517481746,-1.21778656326, --0.640890844144,1.22981756579,-1.25322747007, --0.640890844144,1.26446031412,-1.28868906445, --0.640890844144,1.29910306245,-1.32416815691, --0.640890844144,1.33374581079,-1.35966641223, --0.640890844144,1.36838855912,-1.39517577673, --0.640890844144,1.40303130745,-1.43071261872, --0.640890844144,1.43767405578,-1.46625125415, --0.640890844144,1.47231680411,-1.50181106976, --0.640890844144,1.50695955245,-1.53737891205, --0.640890844144,1.54160230078,-1.57296879252, --0.640890844144,1.57624504911,-1.60856211551, --0.640890844144,1.61088779744,-1.64416157208, --0.640890844144,1.64553054577,-1.67977141995, --0.640890844144,1.68017329411,-1.71262037581, --0.640890844144,1.71481604244,-1.74829846681, --0.606248095812,-1.71481604244,1.34383202173, --0.606248095812,-1.68017329411,1.33137651866, --0.606248095812,-1.64553054577,1.31624484014, --0.606248095812,-1.61088779744,1.29891856692, --0.606248095812,-1.57624504911,1.2798243195, --0.606248095812,-1.54160230078,1.25928603606, --0.606248095812,-1.50695955245,1.23741950761, --0.606248095812,-1.47231680411,1.21447935224, --0.606248095812,-1.43767405578,1.19057621828, --0.606248095812,-1.40303130745,1.16583589063, --0.606248095812,-1.36838855912,1.14035090844, --0.606248095812,-1.33374581079,1.11417221583, --0.606248095812,-1.29910306245,1.09998077273, --0.606248095812,-1.26446031412,1.09036170369, --0.606248095812,-1.22981756579,1.07697693666, --0.606248095812,-1.19517481746,1.0605684578, --0.606248095812,-1.16053206913,1.0417055908, --0.606248095812,-1.12588932079,1.02083321944, --0.606248095812,-1.09124657246,0.998260966445, --0.606248095812,-1.05660382413,0.974272328901, --0.606248095812,-1.0219610758,0.949063325926, --0.606248095812,-0.987318327465,0.919319313577, --0.606248095812,-0.952675579133,0.889137521643, --0.606248095812,-0.918032830801,0.858727413459, --0.606248095812,-0.883390082469,0.828098565205, --0.606248095812,-0.848747334136,0.797266500565, --0.606248095812,-0.814104585804,0.766225942724, --0.606248095812,-0.779461837472,0.735000189001, --0.606248095812,-0.74481908914,0.70360226049, --0.606248095812,-0.710176340808,0.672031695023, --0.606248095812,-0.675533592476,0.640298370655, --0.606248095812,-0.640890844144,0.608419418665, --0.606248095812,-0.606248095812,0.576382275885, --0.606248095812,-0.57160534748,0.544217878931, --0.606248095812,-0.536962599148,0.511908367141, --0.606248095812,-0.502319850815,0.479472203924, --0.606248095812,-0.467677102483,0.446912342974, --0.606248095812,-0.433034354151,0.414233783369, --0.606248095812,-0.398391605819,0.381438369972, --0.606248095812,-0.363748857487,0.348527918354, --0.606248095812,-0.329106109155,0.315519399035, --0.606248095812,-0.294463360823,0.282404012746, --0.606248095812,-0.259820612491,0.249185611336, --0.606248095812,-0.225177864159,0.215874868641, --0.606248095812,-0.190535115827,0.182465534484, --0.606248095812,-0.155892367494,0.14897042382, --0.606248095812,-0.121249619162,0.115385308777, --0.606248095812,-0.0866068708302,0.0817212638541, --0.606248095812,-0.0519641224981,0.0479721121095, --0.606248095812,-0.017321374166,0.0141375872931, --0.606248095812,0.017321374166,-0.0187267699714, --0.606248095812,0.0519641224981,-0.052680176661, --0.606248095812,0.0866068708302,-0.0868566338669, --0.606248095812,0.121249619162,-0.121110575209, --0.606248095812,0.155892367494,-0.155413125961, --0.606248095812,0.190535115827,-0.18977852069, --0.606248095812,0.225177864159,-0.224202183207, --0.606248095812,0.259820612491,-0.258678839297, --0.606248095812,0.294463360823,-0.293207341336, --0.606248095812,0.329106109155,-0.327792186439, --0.606248095812,0.363748857487,-0.36242058367, --0.606248095812,0.398391605819,-0.397097511456, --0.606248095812,0.433034354151,-0.431825490433, --0.606248095812,0.467677102483,-0.466588659902, --0.606248095812,0.502319850815,-0.501401027551, --0.606248095812,0.536962599148,-0.536254379632, --0.606248095812,0.57160534748,-0.571150836922, --0.606248095812,0.606248095812,-0.606092405452, --0.606248095812,0.640890844144,-0.641060015825, --0.606248095812,0.675533592476,-0.676068749443, --0.606248095812,0.710176340808,-0.711114716116, --0.606248095812,0.74481908914,-0.746190606009, --0.606248095812,0.779461837472,-0.781301050619, --0.606248095812,0.814104585804,-0.816442145142, --0.606248095812,0.848747334136,-0.851619921923, --0.606248095812,0.883390082469,-0.886822777725, --0.606248095812,0.918032830801,-0.922051801752, --0.606248095812,0.952675579133,-0.957313081011, --0.606248095812,0.987318327465,-0.99260145221, --0.606248095812,1.0219610758,-1.02792071916, --0.606248095812,1.05660382413,-1.06326559742, --0.606248095812,1.09124657246,-1.09862079091, --0.606248095812,1.12588932079,-1.13400906323, --0.606248095812,1.16053206913,-1.16941903275, --0.606248095812,1.19517481746,-1.20485002661, --0.606248095812,1.22981756579,-1.24030091049, --0.606248095812,1.26446031412,-1.27577527853, --0.606248095812,1.29910306245,-1.31126273616, --0.606248095812,1.33374581079,-1.34677566945, --0.606248095812,1.36838855912,-1.38230619443, --0.606248095812,1.40303130745,-1.41785113547, --0.606248095812,1.43767405578,-1.45340891472, --0.606248095812,1.47231680411,-1.48899436583, --0.606248095812,1.50695955245,-1.5245849875, --0.606248095812,1.54160230078,-1.56018264566, --0.606248095812,1.57624504911,-1.59580001311, --0.606248095812,1.61088779744,-1.63143063119, --0.606248095812,1.64553054577,-1.66707220803, --0.606248095812,1.68017329411,-1.70272226278, --0.606248095812,1.71481604244,-1.73838605422, --0.57160534748,-1.71481604244,1.35522259268, --0.57160534748,-1.68017329411,1.34277762201, --0.57160534748,-1.64553054577,1.3276141817, --0.57160534748,-1.61088779744,1.3103197535, --0.57160534748,-1.57624504911,1.29123674752, --0.57160534748,-1.54160230078,1.27067278778, --0.57160534748,-1.50695955245,1.24880905009, --0.57160534748,-1.47231680411,1.22587845984, --0.57160534748,-1.43767405578,1.20194817965, --0.57160534748,-1.40303130745,1.17721392453, --0.57160534748,-1.36838855912,1.15169819279, --0.57160534748,-1.33374581079,1.12552478587, --0.57160534748,-1.29910306245,1.11240681327, --0.57160534748,-1.26446031412,1.10279342642, --0.57160534748,-1.22981756579,1.08940873644, --0.57160534748,-1.19517481746,1.07300146596, --0.57160534748,-1.16053206913,1.05414390537, --0.57160534748,-1.12588932079,1.03326985543, --0.57160534748,-1.09124657246,1.01070286889, --0.57160534748,-1.05660382413,0.986715400734, --0.57160534748,-1.0219610758,0.961113368906, --0.57160534748,-0.987318327465,0.931207324134, --0.57160534748,-0.952675579133,0.901046696339, --0.57160534748,-0.918032830801,0.870658052469, --0.57160534748,-0.883390082469,0.840058194175, --0.57160534748,-0.848747334136,0.809231530202, --0.57160534748,-0.814104585804,0.778219141049, --0.57160534748,-0.779461837472,0.74701511796, --0.57160534748,-0.74481908914,0.71564079051, --0.57160534748,-0.710176340808,0.684087939434, --0.57160534748,-0.675533592476,0.652382267378, --0.57160534748,-0.640890844144,0.620518325254, --0.57160534748,-0.606248095812,0.588511399958, --0.57160534748,-0.57160534748,0.556358735739, --0.57160534748,-0.536962599148,0.524078836262, --0.57160534748,-0.502319850815,0.491662737046, --0.57160534748,-0.467677102483,0.459130865163, --0.57160534748,-0.433034354151,0.426473665756, --0.57160534748,-0.398391605819,0.393702004532, --0.57160534748,-0.363748857487,0.36080805511, --0.57160534748,-0.329106109155,0.327811988812, --0.57160534748,-0.294463360823,0.294721131596, --0.57160534748,-0.259820612491,0.261522816705, --0.57160534748,-0.225177864159,0.228229658538, --0.57160534748,-0.190535115827,0.194842541784, --0.57160534748,-0.155892367494,0.16136586598, --0.57160534748,-0.121249619162,0.127798031836, --0.57160534748,-0.0866068708302,0.0941433801723, --0.57160534748,-0.0519641224981,0.0604125912403, --0.57160534748,-0.017321374166,0.026597206226, --0.57160534748,0.017321374166,-0.00631649971649, --0.57160534748,0.0519641224981,-0.0401015822349, --0.57160534748,0.0866068708302,-0.0742732259763, --0.57160534748,0.121249619162,-0.10850946327, --0.57160534748,0.155892367494,-0.142814844149, --0.57160534748,0.190535115827,-0.177173152174, --0.57160534748,0.225177864159,-0.211589504959, --0.57160534748,0.259820612491,-0.246063355598, --0.57160534748,0.294463360823,-0.280590299436, --0.57160534748,0.329106109155,-0.31516688066, --0.57160534748,0.363748857487,-0.349792601264, --0.57160534748,0.398391605819,-0.384466723441, --0.57160534748,0.433034354151,-0.419194895309, --0.57160534748,0.467677102483,-0.453962917404, --0.57160534748,0.502319850815,-0.488775971262, --0.57160534748,0.536962599148,-0.523625891904, --0.57160534748,0.57160534748,-0.558529268592, --0.57160534748,0.606248095812,-0.593452901532, --0.57160534748,0.640890844144,-0.628429194297, --0.57160534748,0.675533592476,-0.663438270675, --0.57160534748,0.710176340808,-0.698483100951, --0.57160534748,0.74481908914,-0.733562536482, --0.57160534748,0.779461837472,-0.768674677568, --0.57160534748,0.814104585804,-0.803824360934, --0.57160534748,0.848747334136,-0.839003134436, --0.57160534748,0.883390082469,-0.87421188853, --0.57160534748,0.918032830801,-0.909444291258, --0.57160534748,0.952675579133,-0.944707539041, --0.57160534748,0.987318327465,-0.980002761227, --0.57160534748,1.0219610758,-1.01532943003, --0.57160534748,1.05660382413,-1.05067177727, --0.57160534748,1.09124657246,-1.08603795392, --0.57160534748,1.12588932079,-1.12143252592, --0.57160534748,1.16053206913,-1.15684948831, --0.57160534748,1.19517481746,-1.19228793323, --0.57160534748,1.22981756579,-1.22774915602, --0.57160534748,1.26446031412,-1.26322564361, --0.57160534748,1.29910306245,-1.29872859077, --0.57160534748,1.33374581079,-1.33425121294, --0.57160534748,1.36838855912,-1.36978428993, --0.57160534748,1.40303130745,-1.40533931344, --0.57160534748,1.43767405578,-1.4409210209, --0.57160534748,1.47231680411,-1.4765096541, --0.57160534748,1.50695955245,-1.51210857102, --0.57160534748,1.54160230078,-1.54772519204, --0.57160534748,1.57624504911,-1.58335659976, --0.57160534748,1.61088779744,-1.61900563817, --0.57160534748,1.64553054577,-1.6546609041, --0.57160534748,1.68017329411,-1.69032790628, --0.57160534748,1.71481604244,-1.72600783627, --0.536962599148,-1.71481604244,1.3662607958, --0.536962599148,-1.68017329411,1.35382846531, --0.536962599148,-1.64553054577,1.33867035388, --0.536962599148,-1.61088779744,1.32135498409, --0.536962599148,-1.57624504911,1.30227272726, --0.536962599148,-1.54160230078,1.2816830369, --0.536962599148,-1.50695955245,1.25986010994, --0.536962599148,-1.47231680411,1.23689698059, --0.536962599148,-1.43767405578,1.21300671822, --0.536962599148,-1.40303130745,1.1882458888, --0.536962599148,-1.36838855912,1.16273728709, --0.536962599148,-1.33374581079,1.13656778224, --0.536962599148,-1.29910306245,1.12446545016, --0.536962599148,-1.26446031412,1.11485741199, --0.536962599148,-1.22981756579,1.10147442155, --0.536962599148,-1.19517481746,1.08506890303, --0.536962599148,-1.16053206913,1.06621330532, --0.536962599148,-1.12588932079,1.0453404522, --0.536962599148,-1.09124657246,1.0227736649, --0.536962599148,-1.05660382413,0.998786594102, --0.536962599148,-1.0219610758,0.972638717562, --0.536962599148,-0.987318327465,0.942748905372, --0.536962599148,-0.952675579133,0.912611914195, --0.536962599148,-0.918032830801,0.882241036276, --0.536962599148,-0.883390082469,0.851657244525, --0.536962599148,-0.848747334136,0.820867768453, --0.536962599148,-0.814104585804,0.789863767398, --0.536962599148,-0.779461837472,0.758681762691, --0.536962599148,-0.74481908914,0.727326205641, --0.536962599148,-0.710176340808,0.695797115949, --0.536962599148,-0.675533592476,0.66411016407, --0.536962599148,-0.640890844144,0.632269556122, --0.536962599148,-0.606248095812,0.600283191172, --0.536962599148,-0.57160534748,0.568153891079, --0.536962599148,-0.536962599148,0.535886490125, --0.536962599148,-0.502319850815,0.503493734986, --0.536962599148,-0.467677102483,0.470974551783, --0.536962599148,-0.433034354151,0.438345241132, --0.536962599148,-0.398391605819,0.405583345895, --0.536962599148,-0.363748857487,0.372727464492, --0.536962599148,-0.329106109155,0.339754923835, --0.536962599148,-0.294463360823,0.306674283002, --0.536962599148,-0.259820612491,0.273496318419, --0.536962599148,-0.225177864159,0.240220894608, --0.536962599148,-0.190535115827,0.206852937331, --0.536962599148,-0.155892367494,0.173389601334, --0.536962599148,-0.121249619162,0.139837361105, --0.536962599148,-0.0866068708302,0.106204598964, --0.536962599148,-0.0519641224981,0.072483256866, --0.536962599148,-0.017321374166,0.0386892690974, --0.536962599148,0.017321374166,0.00572483135448, --0.536962599148,0.0519641224981,-0.0278951210414, --0.536962599148,0.0866068708302,-0.0620651615223, --0.536962599148,0.121249619162,-0.0963014712877, --0.536962599148,0.155892367494,-0.130588614252, --0.536962599148,0.190535115827,-0.164942250445, --0.536962599148,0.225177864159,-0.199355768434, --0.536962599148,0.259820612491,-0.233821844109, --0.536962599148,0.294463360823,-0.268344754945, --0.536962599148,0.329106109155,-0.302918332985, --0.536962599148,0.363748857487,-0.337544060123, --0.536962599148,0.398391605819,-0.372218692548, --0.536962599148,0.433034354151,-0.406940852284, --0.536962599148,0.467677102483,-0.441708090339, --0.536962599148,0.502319850815,-0.476516743747, --0.536962599148,0.536962599148,-0.511369629841, --0.536962599148,0.57160534748,-0.546270289306, --0.536962599148,0.606248095812,-0.581196763349, --0.536962599148,0.640890844144,-0.616170755205, --0.536962599148,0.675533592476,-0.651181564688, --0.536962599148,0.710176340808,-0.686225342021, --0.536962599148,0.74481908914,-0.721310120601, --0.536962599148,0.779461837472,-0.756422831457, --0.536962599148,0.814104585804,-0.791571577696, --0.536962599148,0.848747334136,-0.826752512686, --0.536962599148,0.883390082469,-0.861960164767, --0.536962599148,0.918032830801,-0.897200203943, --0.536962599148,0.952675579133,-0.932475078603, --0.536962599148,0.987318327465,-0.967767300916, --0.536962599148,1.0219610758,-1.00308678867, --0.536962599148,1.05660382413,-1.0384385283, --0.536962599148,1.09124657246,-1.07381805553, --0.536962599148,1.12588932079,-1.10921744404, --0.536962599148,1.16053206913,-1.14464151168, --0.536962599148,1.19517481746,-1.180084192, --0.536962599148,1.22981756579,-1.21555256155, --0.536962599148,1.26446031412,-1.25104180526, --0.536962599148,1.29910306245,-1.28655238278, --0.536962599148,1.33374581079,-1.3220746878, --0.536962599148,1.36838855912,-1.35762782147, --0.536962599148,1.40303130745,-1.39319101421, --0.536962599148,1.43767405578,-1.42877101145, --0.536962599148,1.47231680411,-1.46437205982, --0.536962599148,1.50695955245,-1.49998917735, --0.536962599148,1.54160230078,-1.53560585107, --0.536962599148,1.57624504911,-1.5712565455, --0.536962599148,1.61088779744,-1.60691447271, --0.536962599148,1.64553054577,-1.64258546234, --0.536962599148,1.68017329411,-1.67826657198, --0.536962599148,1.71481604244,-1.71395923348, --0.502319850815,-1.71481604244,1.3769924569, --0.502319850815,-1.68017329411,1.36455161259, --0.502319850815,-1.64553054577,1.34940406808, --0.502319850815,-1.61088779744,1.33210639524, --0.502319850815,-1.57624504911,1.31299022263, --0.502319850815,-1.54160230078,1.29243901195, --0.502319850815,-1.50695955245,1.27055670655, --0.502319850815,-1.47231680411,1.24763367937, --0.502319850815,-1.43767405578,1.22371273571, --0.502319850815,-1.40303130745,1.19895378373, --0.502319850815,-1.36838855912,1.17345009155, --0.502319850815,-1.33374581079,1.14728922725, --0.502319850815,-1.29910306245,1.13617767351, --0.502319850815,-1.26446031412,1.12657074209, --0.502319850815,-1.22981756579,1.11319053136, --0.502319850815,-1.19517481746,1.09679141619, --0.502319850815,-1.16053206913,1.07793497527, --0.502319850815,-1.12588932079,1.05706571799, --0.502319850815,-1.09124657246,1.03449489097, --0.502319850815,-1.05660382413,1.01050756991, --0.502319850815,-1.0219610758,0.983838719574, --0.502319850815,-0.987318327465,0.953973299615, --0.502319850815,-0.952675579133,0.923852702183, --0.502319850815,-0.918032830801,0.893508822821, --0.502319850815,-0.883390082469,0.862932165127, --0.502319850815,-0.848747334136,0.83215839116, --0.502319850815,-0.814104585804,0.801183641635, --0.502319850815,-0.779461837472,0.770019879338, --0.502319850815,-0.74481908914,0.738681610962, --0.502319850815,-0.710176340808,0.707175477974, --0.502319850815,-0.675533592476,0.675506408189, --0.502319850815,-0.640890844144,0.643683860588, --0.502319850815,-0.606248095812,0.611718368225, --0.502319850815,-0.57160534748,0.579610404829, --0.502319850815,-0.536962599148,0.547359613445, --0.502319850815,-0.502319850815,0.514994034423, --0.502319850815,-0.467677102483,0.482494910252, --0.502319850815,-0.433034354151,0.449870532853, --0.502319850815,-0.398391605819,0.417145701386, --0.502319850815,-0.363748857487,0.384291409063, --0.502319850815,-0.329106109155,0.351339850547, --0.502319850815,-0.294463360823,0.318284406874, --0.502319850815,-0.259820612491,0.285126916166, --0.502319850815,-0.225177864159,0.251869266733, --0.502319850815,-0.190535115827,0.218514347549, --0.502319850815,-0.155892367494,0.185067582261, --0.502319850815,-0.121249619162,0.15153501213, --0.502319850815,-0.0866068708302,0.117919136875, --0.502319850815,-0.0519641224981,0.0842121619707, --0.502319850815,-0.017321374166,0.0504266797265, --0.502319850815,0.017321374166,0.0174279003935, --0.502319850815,0.0519641224981,-0.0160397606504, --0.502319850815,0.0866068708302,-0.0501978309443, --0.502319850815,0.121249619162,-0.0844311918896, --0.502319850815,0.155892367494,-0.118717178093, --0.502319850815,0.190535115827,-0.153066688813, --0.502319850815,0.225177864159,-0.187473813548, --0.502319850815,0.259820612491,-0.221936190943, --0.502319850815,0.294463360823,-0.25645720028, --0.502319850815,0.329106109155,-0.291024958279, --0.502319850815,0.363748857487,-0.325647851362, --0.502319850815,0.398391605819,-0.360318784228, --0.502319850815,0.433034354151,-0.395034687048, --0.502319850815,0.467677102483,-0.429803594854, --0.502319850815,0.502319850815,-0.464613706624, --0.502319850815,0.536962599148,-0.499464799565, --0.502319850815,0.57160534748,-0.534354718525, --0.502319850815,0.606248095812,-0.56928445786, --0.502319850815,0.640890844144,-0.604257869103, --0.502319850815,0.675533592476,-0.639275197918, --0.502319850815,0.710176340808,-0.674323217812, --0.502319850815,0.74481908914,-0.709405234193, --0.502319850815,0.779461837472,-0.744524313996, --0.502319850815,0.814104585804,-0.779673716238, --0.502319850815,0.848747334136,-0.814853909279, --0.502319850815,0.883390082469,-0.850069192408, --0.502319850815,0.918032830801,-0.885316195666, --0.502319850815,0.952675579133,-0.920585090264, --0.502319850815,0.987318327465,-0.955887029255, --0.502319850815,1.0219610758,-0.991216432714, --0.502319850815,1.05660382413,-1.02656297836, --0.502319850815,1.09124657246,-1.06193781694, --0.502319850815,1.12588932079,-1.09735144736, --0.502319850815,1.16053206913,-1.13277854512, --0.502319850815,1.19517481746,-1.16822975398, --0.502319850815,1.22981756579,-1.20370442648, --0.502319850815,1.26446031412,-1.23919906502, --0.502319850815,1.29910306245,-1.27471526896, --0.502319850815,1.33374581079,-1.31024848362, --0.502319850815,1.36838855912,-1.34580105163, --0.502319850815,1.40303130745,-1.38137706072, --0.502319850815,1.43767405578,-1.41696530498, --0.502319850815,1.47231680411,-1.45257748987, --0.502319850815,1.50695955245,-1.48819212146, --0.502319850815,1.54160230078,-1.52383494428, --0.502319850815,1.57624504911,-1.55948970171, --0.502319850815,1.61088779744,-1.59515777078, --0.502319850815,1.64553054577,-1.6308364833, --0.502319850815,1.68017329411,-1.66653425482, --0.502319850815,1.71481604244,-1.70223891514, --0.467677102483,-1.71481604244,1.38742392049, --0.467677102483,-1.68017329411,1.37499054509, --0.467677102483,-1.64553054577,1.35984733309, --0.467677102483,-1.61088779744,1.34254708736, --0.467677102483,-1.57624504911,1.32345298717, --0.467677102483,-1.54160230078,1.30286765696, --0.467677102483,-1.50695955245,1.28098571539, --0.467677102483,-1.47231680411,1.25803214485, --0.467677102483,-1.43767405578,1.23411808203, --0.467677102483,-1.40303130745,1.20936271927, --0.467677102483,-1.36838855912,1.18386272634, --0.467677102483,-1.33374581079,1.15766805961, --0.467677102483,-1.29910306245,1.14755918393, --0.467677102483,-1.26446031412,1.13795705911, --0.467677102483,-1.22981756579,1.12458077739, --0.467677102483,-1.19517481746,1.10817934969, --0.467677102483,-1.16053206913,1.08932833152, --0.467677102483,-1.12588932079,1.06845942675, --0.467677102483,-1.09124657246,1.04589211947, --0.467677102483,-1.05660382413,1.02190474091, --0.467677102483,-1.0219610758,0.994731578916, --0.467677102483,-0.987318327465,0.964888621613, --0.467677102483,-0.952675579133,0.93478695411, --0.467677102483,-0.918032830801,0.904454227468, --0.467677102483,-0.883390082469,0.873900659446, --0.467677102483,-0.848747334136,0.843140273864, --0.467677102483,-0.814104585804,0.812185235586, --0.467677102483,-0.779461837472,0.78104325135, --0.467677102483,-0.74481908914,0.749722747284, --0.467677102483,-0.710176340808,0.718238367784, --0.467677102483,-0.675533592476,0.686585896255, --0.467677102483,-0.640890844144,0.654784358313, --0.467677102483,-0.606248095812,0.622840600443, --0.467677102483,-0.57160534748,0.590747447847, --0.467677102483,-0.536962599148,0.558523147385, --0.467677102483,-0.502319850815,0.526166158669, --0.467677102483,-0.467677102483,0.493690575158, --0.467677102483,-0.433034354151,0.461090580468, --0.467677102483,-0.398391605819,0.428367720256, --0.467677102483,-0.363748857487,0.395550207587, --0.467677102483,-0.329106109155,0.362605466205, --0.467677102483,-0.294463360823,0.329564665297, --0.467677102483,-0.259820612491,0.296431315416, --0.467677102483,-0.225177864159,0.263188189493, --0.467677102483,-0.190535115827,0.229853223716, --0.467677102483,-0.155892367494,0.196422979888, --0.467677102483,-0.121249619162,0.162904986132, --0.467677102483,-0.0866068708302,0.129300890165, --0.467677102483,-0.0519641224981,0.0956113784211, --0.467677102483,-0.017321374166,0.0618373980307, --0.467677102483,0.017321374166,0.0288018618614, --0.467677102483,0.0519641224981,-0.00452659419773, --0.467677102483,0.0866068708302,-0.0386782986046, --0.467677102483,0.121249619162,-0.0728961260968, --0.467677102483,0.155892367494,-0.107173773739, --0.467677102483,0.190535115827,-0.141524504697, --0.467677102483,0.225177864159,-0.175926757203, --0.467677102483,0.259820612491,-0.210383569692, --0.467677102483,0.294463360823,-0.244900529913, --0.467677102483,0.329106109155,-0.279466954105, --0.467677102483,0.363748857487,-0.314084644809, --0.467677102483,0.398391605819,-0.348754057766, --0.467677102483,0.433034354151,-0.383471346325, --0.467677102483,0.467677102483,-0.418230464113, --0.467677102483,0.502319850815,-0.453037419706, --0.467677102483,0.536962599148,-0.487892258094, --0.467677102483,0.57160534748,-0.522791617925, --0.467677102483,0.606248095812,-0.557714058747, --0.467677102483,0.640890844144,-0.592693233342, --0.467677102483,0.675533592476,-0.627704717171, --0.467677102483,0.710176340808,-0.662754215162, --0.467677102483,0.74481908914,-0.69783891678, --0.467677102483,0.779461837472,-0.732955859156, --0.467677102483,0.814104585804,-0.768106533364, --0.467677102483,0.848747334136,-0.803293412354, --0.467677102483,0.883390082469,-0.838505512783, --0.467677102483,0.918032830801,-0.873756463355, --0.467677102483,0.952675579133,-0.909028827648, --0.467677102483,0.987318327465,-0.944331339814, --0.467677102483,1.0219610758,-0.979670123894, --0.467677102483,1.05660382413,-1.01502483266, --0.467677102483,1.09124657246,-1.05039980513, --0.467677102483,1.12588932079,-1.0858155837, --0.467677102483,1.16053206913,-1.12124741769, --0.467677102483,1.19517481746,-1.15670557628, --0.467677102483,1.22981756579,-1.19218581344, --0.467677102483,1.26446031412,-1.22768398727, --0.467677102483,1.29910306245,-1.26320494005, --0.467677102483,1.33374581079,-1.29874709174, --0.467677102483,1.36838855912,-1.33431000173, --0.467677102483,1.40303130745,-1.36988937621, --0.467677102483,1.43767405578,-1.40548542828, --0.467677102483,1.47231680411,-1.44109517717, --0.467677102483,1.50695955245,-1.4767320791, --0.467677102483,1.54160230078,-1.51237371452, --0.467677102483,1.57624504911,-1.54804129246, --0.467677102483,1.61088779744,-1.58371839801, --0.467677102483,1.64553054577,-1.61941006724, --0.467677102483,1.68017329411,-1.65511457127, --0.467677102483,1.71481604244,-1.6908305561, --0.433034354151,-1.71481604244,1.39757254592, --0.433034354151,-1.68017329411,1.38511631729, --0.433034354151,-1.64553054577,1.36998052071, --0.433034354151,-1.61088779744,1.35267008164, --0.433034354151,-1.57624504911,1.33358667848, --0.433034354151,-1.54160230078,1.31300592001, --0.433034354151,-1.50695955245,1.2911318651, --0.433034354151,-1.47231680411,1.26818185847, --0.433034354151,-1.43767405578,1.24427332075, --0.433034354151,-1.40303130745,1.2194874639, --0.433034354151,-1.36838855912,1.19399260997, --0.433034354151,-1.33374581079,1.16780175494, --0.433034354151,-1.29910306245,1.15863496616, --0.433034354151,-1.26446031412,1.14903403095, --0.433034354151,-1.22981756579,1.13565886773, --0.433034354151,-1.19517481746,1.11926378252, --0.433034354151,-1.16053206913,1.10041121295, --0.433034354151,-1.12588932079,1.07953991925, --0.433034354151,-1.09124657246,1.05697695329, --0.433034354151,-1.05660382413,1.03298898345, --0.433034354151,-1.0219610758,1.0053483059, --0.433034354151,-0.987318327465,0.975511764348, --0.433034354151,-0.952675579133,0.945431109352, --0.433034354151,-0.918032830801,0.915107186834, --0.433034354151,-0.883390082469,0.884579013115, --0.433034354151,-0.848747334136,0.853829995207, --0.433034354151,-0.814104585804,0.822902325757, --0.433034354151,-0.779461837472,0.791775350628, --0.433034354151,-0.74481908914,0.760469181092, --0.433034354151,-0.710176340808,0.729000253065, --0.433034354151,-0.675533592476,0.697372558879, --0.433034354151,-0.640890844144,0.665587908273, --0.433034354151,-0.606248095812,0.63365757279, --0.433034354151,-0.57160534748,0.601587831922, --0.433034354151,-0.536962599148,0.569380752606, --0.433034354151,-0.502319850815,0.537043276619, --0.433034354151,-0.467677102483,0.504579668623, --0.433034354151,-0.433034354151,0.472000557357, --0.433034354151,-0.398391605819,0.43930483698, --0.433034354151,-0.363748857487,0.406491268125, --0.433034354151,-0.329106109155,0.373568773595, --0.433034354151,-0.294463360823,0.340554522855, --0.433034354151,-0.259820612491,0.307425175094, --0.433034354151,-0.225177864159,0.274201269928, --0.433034354151,-0.190535115827,0.240880534908, --0.433034354151,-0.155892367494,0.20746924847, --0.433034354151,-0.121249619162,0.173965125233, --0.433034354151,-0.0866068708302,0.140373541451, --0.433034354151,-0.0519641224981,0.106698932948, --0.433034354151,-0.017321374166,0.0729389347269, --0.433034354151,0.017321374166,0.0398647622193, --0.433034354151,0.0519641224981,0.00668358004784, --0.433034354151,0.0866068708302,-0.02747456389, --0.433034354151,0.121249619162,-0.0616779864964, --0.433034354151,0.155892367494,-0.0959576379385, --0.433034354151,0.190535115827,-0.130297731123, --0.433034354151,0.225177864159,-0.164696415519, --0.433034354151,0.259820612491,-0.199148836455, --0.433034354151,0.294463360823,-0.233660461055, --0.433034354151,0.329106109155,-0.26822228587, --0.433034354151,0.363748857487,-0.302841166399, --0.433034354151,0.398391605819,-0.337506364774, --0.433034354151,0.433034354151,-0.372218692548, --0.433034354151,0.467677102483,-0.406978773844, --0.433034354151,0.502319850815,-0.441789125792, --0.433034354151,0.536962599148,-0.476634348076, --0.433034354151,0.57160534748,-0.511534703759, --0.433034354151,0.606248095812,-0.546466384819, --0.433034354151,0.640890844144,-0.581429743233, --0.433034354151,0.675533592476,-0.616451889367, --0.433034354151,0.710176340808,-0.651500529414, --0.433034354151,0.74481908914,-0.686586469916, --0.433034354151,0.779461837472,-0.721707304586, --0.433034354151,0.814104585804,-0.75686112005, --0.433034354151,0.848747334136,-0.792047327123, --0.433034354151,0.883390082469,-0.827264270185, --0.433034354151,0.918032830801,-0.862511724014, --0.433034354151,0.952675579133,-0.897788332952, --0.433034354151,0.987318327465,-0.933093869196, --0.433034354151,1.0219610758,-0.968431379887, --0.433034354151,1.05660382413,-1.00379107499, --0.433034354151,1.09124657246,-1.03917435843, --0.433034354151,1.12588932079,-1.07459440839, --0.433034354151,1.16053206913,-1.11003278532, --0.433034354151,1.19517481746,-1.14549120332, --0.433034354151,1.22981756579,-1.1809758034, --0.433034354151,1.26446031412,-1.21648348887, --0.433034354151,1.29910306245,-1.25200921589, --0.433034354151,1.33374581079,-1.28755370258, --0.433034354151,1.36838855912,-1.32312219798, --0.433034354151,1.40303130745,-1.35871086066, --0.433034354151,1.43767405578,-1.3943143146, --0.433034354151,1.47231680411,-1.42993374323, --0.433034354151,1.50695955245,-1.46557610613, --0.433034354151,1.54160230078,-1.50122427214, --0.433034354151,1.57624504911,-1.53689925437, --0.433034354151,1.61088779744,-1.5725875706, --0.433034354151,1.64553054577,-1.6082865769, --0.433034354151,1.68017329411,-1.64399900755, --0.433034354151,1.71481604244,-1.67972699993, --0.398391605819,-1.71481604244,1.40745416912, --0.398391605819,-1.68017329411,1.39500144413, --0.398391605819,-1.64553054577,1.37986846545, --0.398391605819,-1.61088779744,1.36254533019, --0.398391605819,-1.57624504911,1.34345414984, --0.398391605819,-1.54160230078,1.32288567234, --0.398391605819,-1.50695955245,1.30101100245, --0.398391605819,-1.47231680411,1.27802302958, --0.398391605819,-1.43767405578,1.25412465178, --0.398391605819,-1.40303130745,1.22937968643, --0.398391605819,-1.36838855912,1.20385831521, --0.398391605819,-1.33374581079,1.17767034946, --0.398391605819,-1.29910306245,1.1694143853, --0.398391605819,-1.26446031412,1.15981793859, --0.398391605819,-1.22981756579,1.1464450731, --0.398391605819,-1.19517481746,1.13004847085, --0.398391605819,-1.16053206913,1.11120004692, --0.398391605819,-1.12588932079,1.09032875488, --0.398391605819,-1.09124657246,1.06776610224, --0.398391605819,-1.05660382413,1.04378301274, --0.398391605819,-1.0219610758,1.01567490367, --0.398391605819,-0.987318327465,0.985858249842, --0.398391605819,-0.952675579133,0.955791167714, --0.398391605819,-0.918032830801,0.925493763396, --0.398391605819,-0.883390082469,0.894982241973, --0.398391605819,-0.848747334136,0.864257178982, --0.398391605819,-0.814104585804,0.833332231524, --0.398391605819,-0.779461837472,0.802219455325, --0.398391605819,-0.74481908914,0.770936334962, --0.398391605819,-0.710176340808,0.73948539347, --0.398391605819,-0.675533592476,0.707872071635, --0.398391605819,-0.640890844144,0.676106410573, --0.398391605819,-0.606248095812,0.644190243539, --0.398391605819,-0.57160534748,0.612136944329, --0.398391605819,-0.536962599148,0.579954913874, --0.398391605819,-0.502319850815,0.547626653415, --0.398391605819,-0.467677102483,0.515186843887, --0.398391605819,-0.433034354151,0.482626955325, --0.398391605819,-0.398391605819,0.449937013602, --0.398391605819,-0.363748857487,0.417145701386, --0.398391605819,-0.329106109155,0.384245462346, --0.398391605819,-0.294463360823,0.351249749136, --0.398391605819,-0.259820612491,0.318131662662, --0.398391605819,-0.225177864159,0.284922024576, --0.398391605819,-0.190535115827,0.251618993439, --0.398391605819,-0.155892367494,0.218222763232, --0.398391605819,-0.121249619162,0.184731854091, --0.398391605819,-0.0866068708302,0.151153352891, --0.398391605819,-0.0519641224981,0.117491413202, --0.398391605819,-0.017321374166,0.0837474435691, --0.398391605819,0.017321374166,0.0506331999698, --0.398391605819,0.0519641224981,0.0175868177787, --0.398391605819,0.0866068708302,-0.0165588389922, --0.398391605819,0.121249619162,-0.0507599327015, --0.398391605819,0.155892367494,-0.085034837735, --0.398391605819,0.190535115827,-0.119377141362, --0.398391605819,0.225177864159,-0.153763856996, --0.398391605819,0.259820612491,-0.188215074382, --0.398391605819,0.294463360823,-0.22272029688, --0.398391605819,0.329106109155,-0.257282027208, --0.398391605819,0.363748857487,-0.29189595466, --0.398391605819,0.398391605819,-0.326558974973, --0.398391605819,0.433034354151,-0.361273098661, --0.398391605819,0.467677102483,-0.396031134797, --0.398391605819,0.502319850815,-0.430833351292, --0.398391605819,0.536962599148,-0.465684883931, --0.398391605819,0.57160534748,-0.500580985168, --0.398391605819,0.606248095812,-0.535509534531, --0.398391605819,0.640890844144,-0.570487153178, --0.398391605819,0.675533592476,-0.60550596901, --0.398391605819,0.710176340808,-0.640548119739, --0.398391605819,0.74481908914,-0.675634522788, --0.398391605819,0.779461837472,-0.710754697067, --0.398391605819,0.814104585804,-0.745911937964, --0.398391605819,0.848747334136,-0.781099318469, --0.398391605819,0.883390082469,-0.816322166575, --0.398391605819,0.918032830801,-0.851572343558, --0.398391605819,0.952675579133,-0.886847038962, --0.398391605819,0.987318327465,-0.922157661556, --0.398391605819,1.0219610758,-0.957496341855, --0.398391605819,1.05660382413,-0.992860494632, --0.398391605819,1.09124657246,-1.02826157977, --0.398391605819,1.12588932079,-1.06367143649, --0.398391605819,1.16053206913,-1.09911094656, --0.398391605819,1.19517481746,-1.13457635667, --0.398391605819,1.22981756579,-1.17006533265, --0.398391605819,1.26446031412,-1.20557711785, --0.398391605819,1.29910306245,-1.24110687425, --0.398391605819,1.33374581079,-1.27665826394, --0.398391605819,1.36838855912,-1.31222935054, --0.398391605819,1.40303130745,-1.34782568908, --0.398391605819,1.43767405578,-1.38343616901, --0.398391605819,1.47231680411,-1.41906434235, --0.398391605819,1.50695955245,-1.45470905723, --0.398391605819,1.54160230078,-1.49037026929, --0.398391605819,1.57624504911,-1.52605560078, --0.398391605819,1.61088779744,-1.56174484184, --0.398391605819,1.64553054577,-1.5974535916, --0.398391605819,1.68017329411,-1.63317544621, --0.398391605819,1.71481604244,-1.66890893702, --0.363748857487,-1.71481604244,1.4170550942, --0.363748857487,-1.68017329411,1.40464682847, --0.363748857487,-1.64553054577,1.38949038504, --0.363748857487,-1.61088779744,1.37219644663, --0.363748857487,-1.57624504911,1.35308271002, --0.363748857487,-1.54160230078,1.33250599737, --0.363748857487,-1.50695955245,1.31063762643, --0.363748857487,-1.47231680411,1.28767552642, --0.363748857487,-1.43767405578,1.26372769637, --0.363748857487,-1.40303130745,1.23899036378, --0.363748857487,-1.36838855912,1.21346630321, --0.363748857487,-1.33374581079,1.18728519642, --0.363748857487,-1.29910306245,1.17991600656, --0.363748857487,-1.26446031412,1.17032064414, --0.363748857487,-1.22981756579,1.15695085627, --0.363748857487,-1.19517481746,1.14055678116, --0.363748857487,-1.16053206913,1.12170596155, --0.363748857487,-1.12588932079,1.1008407413, --0.363748857487,-1.09124657246,1.0782749673, --0.363748857487,-1.05660382413,1.05429015688, --0.363748857487,-1.0219610758,1.02574706993, --0.363748857487,-0.987318327465,0.995942375625, --0.363748857487,-0.952675579133,0.965891132343, --0.363748857487,-0.918032830801,0.935616550927, --0.363748857487,-0.883390082469,0.905112485995, --0.363748857487,-0.848747334136,0.874406505263, --0.363748857487,-0.814104585804,0.843490455649, --0.363748857487,-0.779461837472,0.812407819309, --0.363748857487,-0.74481908914,0.781134118637, --0.363748857487,-0.710176340808,0.749702542481, --0.363748857487,-0.675533592476,0.718102635041, --0.363748857487,-0.640890844144,0.686358193813, --0.363748857487,-0.606248095812,0.654461409648, --0.363748857487,-0.57160534748,0.622424643709, --0.363748857487,-0.536962599148,0.590248978183, --0.363748857487,-0.502319850815,0.55795169462, --0.363748857487,-0.467677102483,0.525518560477, --0.363748857487,-0.433034354151,0.492975073038, --0.363748857487,-0.398391605819,0.460313176147, --0.363748857487,-0.363748857487,0.427540474424, --0.363748857487,-0.329106109155,0.394650039794, --0.363748857487,-0.294463360823,0.361648830227, --0.363748857487,-0.259820612491,0.3285592323, --0.363748857487,-0.225177864159,0.29537037497, --0.363748857487,-0.190535115827,0.262077596844, --0.363748857487,-0.155892367494,0.228695333691, --0.363748857487,-0.121249619162,0.195220326057, --0.363748857487,-0.0866068708302,0.161655342371, --0.363748857487,-0.0519641224981,0.128004116958, --0.363748857487,-0.017321374166,0.0942714549683, --0.363748857487,0.017321374166,0.0611300154675, --0.363748857487,0.0519641224981,0.0281997409807, --0.363748857487,0.0866068708302,-0.00592786839047, --0.363748857487,0.121249619162,-0.0401264235977, --0.363748857487,0.155892367494,-0.07440556792, --0.363748857487,0.190535115827,-0.108735840039, --0.363748857487,0.225177864159,-0.143116007661, --0.363748857487,0.259820612491,-0.17756422715, --0.363748857487,0.294463360823,-0.212067513517, --0.363748857487,0.329106109155,-0.246623201769, --0.363748857487,0.363748857487,-0.281233850912, --0.363748857487,0.398391605819,-0.315896433952, --0.363748857487,0.433034354151,-0.35060660402, --0.363748857487,0.467677102483,-0.385364714668, --0.363748857487,0.502319850815,-0.420172030708, --0.363748857487,0.536962599148,-0.455017588166, --0.363748857487,0.57160534748,-0.489914600653, --0.363748857487,0.606248095812,-0.524843075939, --0.363748857487,0.640890844144,-0.559814669222, --0.363748857487,0.675533592476,-0.594827518342, --0.363748857487,0.710176340808,-0.629879129408, --0.363748857487,0.74481908914,-0.664967610186, --0.363748857487,0.779461837472,-0.700089694413, --0.363748857487,0.814104585804,-0.735247978363, --0.363748857487,0.848747334136,-0.77043882245, --0.363748857487,0.883390082469,-0.80565848106, --0.363748857487,0.918032830801,-0.840909182792, --0.363748857487,0.952675579133,-0.876197304844, --0.363748857487,0.987318327465,-0.911507073467, --0.363748857487,1.0219610758,-0.94684899652, --0.363748857487,1.05660382413,-0.98221713938, --0.363748857487,1.09124657246,-1.01761319952, --0.363748857487,1.12588932079,-1.0530259211, --0.363748857487,1.16053206913,-1.08847620904, --0.363748857487,1.19517481746,-1.12394556574, --0.363748857487,1.22981756579,-1.15943891096, --0.363748857487,1.26446031412,-1.1949538706, --0.363748857487,1.29910306245,-1.23048771403, --0.363748857487,1.33374581079,-1.26604546168, --0.363748857487,1.36838855912,-1.30162283598, --0.363748857487,1.40303130745,-1.33721919148, --0.363748857487,1.43767405578,-1.37283634879, --0.363748857487,1.47231680411,-1.40847243518, --0.363748857487,1.50695955245,-1.44412947776, --0.363748857487,1.54160230078,-1.47979659843, --0.363748857487,1.57624504911,-1.51547498853, --0.363748857487,1.61088779744,-1.55118043132, --0.363748857487,1.64553054577,-1.5868966509, --0.363748857487,1.68017329411,-1.62262612035, --0.363748857487,1.71481604244,-1.65836985634, --0.329106109155,-1.71481604244,1.42646420531, --0.329106109155,-1.68017329411,1.4140258738, --0.329106109155,-1.64553054577,1.39886139058, --0.329106109155,-1.61088779744,1.38157692895, --0.329106109155,-1.57624504911,1.36245925283, --0.329106109155,-1.54160230078,1.34186752109, --0.329106109155,-1.50695955245,1.32000987737, --0.329106109155,-1.47231680411,1.29702522461, --0.329106109155,-1.43767405578,1.27309526639, --0.329106109155,-1.40303130745,1.24836476603, --0.329106109155,-1.36838855912,1.22284531415, --0.329106109155,-1.33374581079,1.19666815593, --0.329106109155,-1.29910306245,1.19015372463, --0.329106109155,-1.26446031412,1.18056256142, --0.329106109155,-1.22981756579,1.16719369638, --0.329106109155,-1.19517481746,1.15079888513, --0.329106109155,-1.16053206913,1.13195124071, --0.329106109155,-1.12588932079,1.11108534835, --0.329106109155,-1.09124657246,1.08852252369, --0.329106109155,-1.05660382413,1.06453629097, --0.329106109155,-1.0219610758,1.03556461334, --0.329106109155,-0.987318327465,1.00578448485, --0.329106109155,-0.952675579133,0.975752118409, --0.329106109155,-0.918032830801,0.945479200053, --0.329106109155,-0.883390082469,0.914984267641, --0.329106109155,-0.848747334136,0.884293112897, --0.329106109155,-0.814104585804,0.853406390689, --0.329106109155,-0.779461837472,0.822338235105, --0.329106109155,-0.74481908914,0.791080440665, --0.329106109155,-0.710176340808,0.75966282456, --0.329106109155,-0.675533592476,0.728083485837, --0.329106109155,-0.640890844144,0.696349914521, --0.329106109155,-0.606248095812,0.664471958981, --0.329106109155,-0.57160534748,0.632449770967, --0.329106109155,-0.536962599148,0.600293746117, --0.329106109155,-0.502319850815,0.568005424973, --0.329106109155,-0.467677102483,0.535596259324, --0.329106109155,-0.433034354151,0.503067957419, --0.329106109155,-0.398391605819,0.470414537056, --0.329106109155,-0.363748857487,0.437663749892, --0.329106109155,-0.329106109155,0.404782104697, --0.329106109155,-0.294463360823,0.371817518154, --0.329106109155,-0.259820612491,0.338741384752, --0.329106109155,-0.225177864159,0.305552866427, --0.329106109155,-0.190535115827,0.272276016511, --0.329106109155,-0.155892367494,0.238907688401, --0.329106109155,-0.121249619162,0.205444550982, --0.329106109155,-0.0866068708302,0.171893406678, --0.329106109155,-0.0519641224981,0.138256335791, --0.329106109155,-0.017321374166,0.104531831779, --0.329106109155,0.017321374166,0.071361065263, --0.329106109155,0.0519641224981,0.0385544920569, --0.329106109155,0.0866068708302,0.00442278851763, --0.329106109155,0.121249619162,-0.0297748907031, --0.329106109155,0.155892367494,-0.0640261799027, --0.329106109155,0.190535115827,-0.0983602518501, --0.329106109155,0.225177864159,-0.132734604873, --0.329106109155,0.259820612491,-0.167182227983, --0.329106109155,0.294463360823,-0.201681888892, --0.329106109155,0.329106109155,-0.236238525303, --0.329106109155,0.363748857487,-0.270844679784, --0.329106109155,0.398391605819,-0.305504438101, --0.329106109155,0.433034354151,-0.340211216913, --0.329106109155,0.467677102483,-0.374972232355, --0.329106109155,0.502319850815,-0.409774072157, --0.329106109155,0.536962599148,-0.44461856715, --0.329106109155,0.57160534748,-0.479510051067, --0.329106109155,0.606248095812,-0.514439024189, --0.329106109155,0.640890844144,-0.549415492843, --0.329106109155,0.675533592476,-0.584428493875, --0.329106109155,0.710176340808,-0.619483815418, --0.329106109155,0.74481908914,-0.654571418338, --0.329106109155,0.779461837472,-0.689697600063, --0.329106109155,0.814104585804,-0.72485488857, --0.329106109155,0.848747334136,-0.760046811311, --0.329106109155,0.883390082469,-0.795270149816, --0.329106109155,0.918032830801,-0.830521451924, --0.329106109155,0.952675579133,-0.865809217161, --0.329106109155,0.987318327465,-0.90112764264, --0.329106109155,1.0219610758,-0.936464236646, --0.329106109155,1.05660382413,-0.971833986077, --0.329106109155,1.09124657246,-1.00723248557, --0.329106109155,1.12588932079,-1.04266724295, --0.329106109155,1.16053206913,-1.07810760187, --0.329106109155,1.19517481746,-1.11358204551, --0.329106109155,1.22981756579,-1.14907926405, --0.329106109155,1.26446031412,-1.18459603092, --0.329106109155,1.29910306245,-1.22013750722, --0.329106109155,1.33374581079,-1.25570112266, --0.329106109155,1.36838855912,-1.2912819755, --0.329106109155,1.40303130745,-1.32688483154, --0.329106109155,1.43767405578,-1.3625097033, --0.329106109155,1.47231680411,-1.39814451498, --0.329106109155,1.50695955245,-1.433810361, --0.329106109155,1.54160230078,-1.46947495582, --0.329106109155,1.57624504911,-1.50518010192, --0.329106109155,1.61088779744,-1.54088060691, --0.329106109155,1.64553054577,-1.57660232306, --0.329106109155,1.68017329411,-1.61234072654, --0.329106109155,1.71481604244,-1.64809237891, --0.294463360823,-1.71481604244,1.4356189399, --0.294463360823,-1.68017329411,1.42318171022, --0.294463360823,-1.64553054577,1.40802475667, --0.294463360823,-1.61088779744,1.39070311, --0.294463360823,-1.57624504911,1.3716329765, --0.294463360823,-1.54160230078,1.351037145, --0.294463360823,-1.50695955245,1.32914200093, --0.294463360823,-1.47231680411,1.30617387738, --0.294463360823,-1.43767405578,1.28225013352, --0.294463360823,-1.40303130745,1.25747970049, --0.294463360823,-1.36838855912,1.23196649183, --0.294463360823,-1.33374581079,1.20579058068, --0.294463360823,-1.29910306245,1.20013768289, --0.294463360823,-1.26446031412,1.19055037661, --0.294463360823,-1.22981756579,1.17718325516, --0.294463360823,-1.19517481746,1.16079129877, --0.294463360823,-1.16053206913,1.14194463047, --0.294463360823,-1.12588932079,1.12107996771, --0.294463360823,-1.09124657246,1.09851673231, --0.294463360823,-1.05660382413,1.07453386004, --0.294463360823,-1.0219610758,1.04515230759, --0.294463360823,-0.987318327465,1.01537536264, --0.294463360823,-0.952675579133,0.985361174867, --0.294463360823,-0.918032830801,0.955113668438, --0.294463360823,-0.883390082469,0.924632263874, --0.294463360823,-0.848747334136,0.893955693781, --0.294463360823,-0.814104585804,0.863076608535, --0.294463360823,-0.779461837472,0.83202380423, --0.294463360823,-0.74481908914,0.800791389234, --0.294463360823,-0.710176340808,0.769381387864, --0.294463360823,-0.675533592476,0.737818395099, --0.294463360823,-0.640890844144,0.706104159161, --0.294463360823,-0.606248095812,0.674238761647, --0.294463360823,-0.57160534748,0.642234335476, --0.294463360823,-0.536962599148,0.610095716963, --0.294463360823,-0.502319850815,0.577825969083, --0.294463360823,-0.467677102483,0.545425089085, --0.294463360823,-0.433034354151,0.512909669638, --0.294463360823,-0.398391605819,0.480275044468, --0.294463360823,-0.363748857487,0.447529866288, --0.294463360823,-0.329106109155,0.414682473796, --0.294463360823,-0.294463360823,0.381717732666, --0.294463360823,-0.259820612491,0.348655753208, --0.294463360823,-0.225177864159,0.315487149977, --0.294463360823,-0.190535115827,0.282224219193, --0.294463360823,-0.155892367494,0.248866309388, --0.294463360823,-0.121249619162,0.215417507368, --0.294463360823,-0.0866068708302,0.181880429881, --0.294463360823,-0.0519641224981,0.148250608185, --0.294463360823,-0.017321374166,0.11454133722, --0.294463360823,0.017321374166,0.0813395170662, --0.294463360823,0.0519641224981,0.0486546955707, --0.294463360823,0.0866068708302,0.0145269077881, --0.294463360823,0.121249619162,-0.0196678390184, --0.294463360823,0.155892367494,-0.0539261918969, --0.294463360823,0.190535115827,-0.0882377412931, --0.294463360823,0.225177864159,-0.122616259088, --0.294463360823,0.259820612491,-0.157058229961, --0.294463360823,0.294463360823,-0.191555861669, --0.294463360823,0.329106109155,-0.226107977343, --0.294463360823,0.363748857487,-0.260711140554, --0.294463360823,0.398391605819,-0.295369724327, --0.294463360823,0.433034354151,-0.330078797359, --0.294463360823,0.467677102483,-0.364833781258, --0.294463360823,0.502319850815,-0.399634574327, --0.294463360823,0.536962599148,-0.434483594497, --0.294463360823,0.57160534748,-0.469375998612, --0.294463360823,0.606248095812,-0.504309837817, --0.294463360823,0.640890844144,-0.539275993356, --0.294463360823,0.675533592476,-0.574294391408, --0.294463360823,0.710176340808,-0.60934642245, --0.294463360823,0.74481908914,-0.644435121278, --0.294463360823,0.779461837472,-0.679558995322, --0.294463360823,0.814104585804,-0.714719363238, --0.294463360823,0.848747334136,-0.749910315769, --0.294463360823,0.883390082469,-0.785138313367, --0.294463360823,0.918032830801,-0.820395175933, --0.294463360823,0.952675579133,-0.855684636971, --0.294463360823,0.987318327465,-0.89099771756, --0.294463360823,1.0219610758,-0.926349560112, --0.294463360823,1.05660382413,-0.961722611936, --0.294463360823,1.09124657246,-0.997120475077, --0.294463360823,1.12588932079,-1.03254651378, --0.294463360823,1.16053206913,-1.06799240421, --0.294463360823,1.19517481746,-1.10347524818, --0.294463360823,1.22981756579,-1.13897354623, --0.294463360823,1.26446031412,-1.17449762389, --0.294463360823,1.29910306245,-1.21004306385, --0.294463360823,1.33374581079,-1.24561210508, --0.294463360823,1.36838855912,-1.28119966923, --0.294463360823,1.40303130745,-1.31680216811, --0.294463360823,1.43767405578,-1.35243432145, --0.294463360823,1.47231680411,-1.38807759608, --0.294463360823,1.50695955245,-1.4237396068, --0.294463360823,1.54160230078,-1.45942168859, --0.294463360823,1.57624504911,-1.49512268735, --0.294463360823,1.61088779744,-1.53082292729, --0.294463360823,1.64553054577,-1.56656042293, --0.294463360823,1.68017329411,-1.60230379388, --0.294463360823,1.71481604244,-1.63806408994, --0.259820612491,-1.71481604244,1.44452586956, --0.259820612491,-1.68017329411,1.43209026686, --0.259820612491,-1.64553054577,1.41697991266, --0.259820612491,-1.61088779744,1.39966149815, --0.259820612491,-1.57624504911,1.38055582917, --0.259820612491,-1.54160230078,1.35995943168, --0.259820612491,-1.50695955245,1.33807476827, --0.259820612491,-1.47231680411,1.31511398724, --0.259820612491,-1.43767405578,1.29118431309, --0.259820612491,-1.40303130745,1.26643166934, --0.259820612491,-1.36838855912,1.240914575, --0.259820612491,-1.33374581079,1.21470633751, --0.259820612491,-1.29910306245,1.20988545292, --0.259820612491,-1.26446031412,1.20029921138, --0.259820612491,-1.22981756579,1.18693472207, --0.259820612491,-1.19517481746,1.17054261576, --0.259820612491,-1.16053206913,1.15169819279, --0.259820612491,-1.12588932079,1.13083254075, --0.259820612491,-1.09124657246,1.1082698529, --0.259820612491,-1.05660382413,1.08400327204, --0.259820612491,-1.0219610758,1.05450371949, --0.259820612491,-0.987318327465,1.02474776236, --0.259820612491,-0.952675579133,0.994746664307, --0.259820612491,-0.918032830801,0.964503737381, --0.259820612491,-0.883390082469,0.934045543721, --0.259820612491,-0.848747334136,0.903379978298, --0.259820612491,-0.814104585804,0.872527160068, --0.259820612491,-0.779461837472,0.841476632097, --0.259820612491,-0.74481908914,0.810264608184, --0.259820612491,-0.710176340808,0.778872003376, --0.259820612491,-0.675533592476,0.747322016748, --0.259820612491,-0.640890844144,0.715619875128, --0.259820612491,-0.606248095812,0.683770023515, --0.259820612491,-0.57160534748,0.651781365439, --0.259820612491,-0.536962599148,0.619661554552, --0.259820612491,-0.502319850815,0.587406555928, --0.259820612491,-0.467677102483,0.555017244082, --0.259820612491,-0.433034354151,0.522520419436, --0.259820612491,-0.398391605819,0.489905701467, --0.259820612491,-0.363748857487,0.457173404274, --0.259820612491,-0.329106109155,0.424335629746, --0.259820612491,-0.294463360823,0.391378895575, --0.259820612491,-0.259820612491,0.358334239685, --0.259820612491,-0.225177864159,0.32518293293, --0.259820612491,-0.190535115827,0.291934190006, --0.259820612491,-0.155892367494,0.258589322081, --0.259820612491,-0.121249619162,0.225154598122, --0.259820612491,-0.0866068708302,0.191624418334, --0.259820612491,-0.0519641224981,0.158009176075, --0.259820612491,-0.017321374166,0.124311838168, --0.259820612491,0.017321374166,0.0910775807387, --0.259820612491,0.0519641224981,0.0585047757767, --0.259820612491,0.0866068708302,0.024386387819, --0.259820612491,0.121249619162,-0.00979463042968, --0.259820612491,0.155892367494,-0.044052094646, --0.259820612491,0.190535115827,-0.0783715299876, --0.259820612491,0.225177864159,-0.11274778958, --0.259820612491,0.259820612491,-0.14717977533, --0.259820612491,0.294463360823,-0.181674262293, --0.259820612491,0.329106109155,-0.216222622767, --0.259820612491,0.363748857487,-0.250824650212, --0.259820612491,0.398391605819,-0.285479972523, --0.259820612491,0.433034354151,-0.320186337726, --0.259820612491,0.467677102483,-0.354937507423, --0.259820612491,0.502319850815,-0.38974106967, --0.259820612491,0.536962599148,-0.424591134865, --0.259820612491,0.57160534748,-0.459478625548, --0.259820612491,0.606248095812,-0.494405703781, --0.259820612491,0.640890844144,-0.529383533723, --0.259820612491,0.675533592476,-0.564395336931, --0.259820612491,0.710176340808,-0.599458470616, --0.259820612491,0.74481908914,-0.634541380047, --0.259820612491,0.779461837472,-0.669667644062, --0.259820612491,0.814104585804,-0.704825750142, --0.259820612491,0.848747334136,-0.740021188383, --0.259820612491,0.883390082469,-0.775250751143, --0.259820612491,0.918032830801,-0.810506323814, --0.259820612491,0.952675579133,-0.845797131227, --0.259820612491,0.987318327465,-0.881121768265, --0.259820612491,1.0219610758,-0.916462716112, --0.259820612491,1.05660382413,-0.95184631056, --0.259820612491,1.09124657246,-0.987249910072, --0.259820612491,1.12588932079,-1.02266985675, --0.259820612491,1.16053206913,-1.05813758944, --0.259820612491,1.19517481746,-1.09361059143, --0.259820612491,1.22981756579,-1.12911514476, --0.259820612491,1.26446031412,-1.164642721, --0.259820612491,1.29910306245,-1.20019213417, --0.259820612491,1.33374581079,-1.23576168116, --0.259820612491,1.36838855912,-1.27135246241, --0.259820612491,1.40303130745,-1.3069658967, --0.259820612491,1.43767405578,-1.34259851082, --0.259820612491,1.47231680411,-1.37824947993, --0.259820612491,1.50695955245,-1.41391679183, --0.259820612491,1.54160230078,-1.4495967033, --0.259820612491,1.57624504911,-1.48530837402, --0.259820612491,1.61088779744,-1.52102827751, --0.259820612491,1.64553054577,-1.55675898049, --0.259820612491,1.68017329411,-1.59250913507, --0.259820612491,1.71481604244,-1.62827341937, --0.225177864159,-1.71481604244,1.45323879888, --0.225177864159,-1.68017329411,1.44084954742, --0.225177864159,-1.64553054577,1.42570032823, --0.225177864159,-1.61088779744,1.40838791506, --0.225177864159,-1.57624504911,1.38928576129, --0.225177864159,-1.54160230078,1.36869650318, --0.225177864159,-1.50695955245,1.34680333737, --0.225177864159,-1.47231680411,1.32381047513, --0.225177864159,-1.43767405578,1.29989214291, --0.225177864159,-1.40303130745,1.27512996639, --0.225177864159,-1.36838855912,1.24962391195, --0.225177864159,-1.33374581079,1.22407083788, --0.225177864159,-1.29910306245,1.219402801, --0.225177864159,-1.26446031412,1.20982018487, --0.225177864159,-1.22981756579,1.19645629923, --0.225177864159,-1.19517481746,1.18006725547, --0.225177864159,-1.16053206913,1.16121982694, --0.225177864159,-1.12588932079,1.14035826464, --0.225177864159,-1.09124657246,1.11779327399, --0.225177864159,-1.05660382413,1.09312439095, --0.225177864159,-1.0219610758,1.06364691834, --0.225177864159,-0.987318327465,1.03390506175, --0.225177864159,-0.952675579133,1.00391880235, --0.225177864159,-0.918032830801,0.973687417546, --0.225177864159,-0.883390082469,0.943245413212, --0.225177864159,-0.848747334136,0.912600604464, --0.225177864159,-0.814104585804,0.881754386728, --0.225177864159,-0.779461837472,0.850723275166, --0.225177864159,-0.74481908914,0.819511899307, --0.225177864159,-0.710176340808,0.788143050508, --0.225177864159,-0.675533592476,0.75660521806, --0.225177864159,-0.640890844144,0.724917406857, --0.225177864159,-0.606248095812,0.693083765965, --0.225177864159,-0.57160534748,0.661110238124, --0.225177864159,-0.536962599148,0.629002574714, --0.225177864159,-0.502319850815,0.596758961813, --0.225177864159,-0.467677102483,0.564396630483, --0.225177864159,-0.433034354151,0.531910698743, --0.225177864159,-0.398391605819,0.499308104973, --0.225177864159,-0.363748857487,0.46659343151, --0.225177864159,-0.329106109155,0.433766090951, --0.225177864159,-0.294463360823,0.40082653014, --0.225177864159,-0.259820612491,0.367787774907, --0.225177864159,-0.225177864159,0.33465535298, --0.225177864159,-0.190535115827,0.301414768403, --0.225177864159,-0.155892367494,0.268082044168, --0.225177864159,-0.121249619162,0.234660155954, --0.225177864159,-0.0866068708302,0.201140830535, --0.225177864159,-0.0519641224981,0.167538226116, --0.225177864159,-0.017321374166,0.133849119941, --0.225177864159,0.017321374166,0.100592804557, --0.225177864159,0.0519641224981,0.0681243114177, --0.225177864159,0.0866068708302,0.0340127492134, --0.225177864159,0.121249619162,-0.000165655740306, --0.225177864159,0.155892367494,-0.0344191172946, --0.225177864159,0.190535115827,-0.0687199278849, --0.225177864159,0.225177864159,-0.103100047452, --0.225177864159,0.259820612491,-0.137537291891, --0.225177864159,0.294463360823,-0.172023291934, --0.225177864159,0.329106109155,-0.206570951747, --0.225177864159,0.363748857487,-0.241170101984, --0.225177864159,0.398391605819,-0.275823719081, --0.225177864159,0.433034354151,-0.31052777846, --0.225177864159,0.467677102483,-0.345283538452, --0.225177864159,0.502319850815,-0.380081966684, --0.225177864159,0.536962599148,-0.414930067294, --0.225177864159,0.57160534748,-0.449816991764, --0.225177864159,0.606248095812,-0.484751312471, --0.225177864159,0.640890844144,-0.519726376382, --0.225177864159,0.675533592476,-0.554736968543, --0.225177864159,0.710176340808,-0.589794799018, --0.225177864159,0.74481908914,-0.624881293938, --0.225177864159,0.779461837472,-0.660009133884, --0.225177864159,0.814104585804,-0.695172440965, --0.225177864159,0.848747334136,-0.730367635808, --0.225177864159,0.883390082469,-0.765596085843, --0.225177864159,0.918032830801,-0.800855039228, --0.225177864159,0.952675579133,-0.836148898881, --0.225177864159,0.987318327465,-0.871472064658, --0.225177864159,1.0219610758,-0.906821336052, --0.225177864159,1.05660382413,-0.942205544657, --0.225177864159,1.09124657246,-0.977609740911, --0.225177864159,1.12588932079,-1.01304095519, --0.225177864159,1.16053206913,-1.04848819696, --0.225177864159,1.19517481746,-1.08398118788, --0.225177864159,1.22981756579,-1.11948707677, --0.225177864159,1.26446031412,-1.15501690507, --0.225177864159,1.29910306245,-1.19056970469, --0.225177864159,1.33374581079,-1.22614343151, --0.225177864159,1.36838855912,-1.26174036421, --0.225177864159,1.40303130745,-1.29735805737, --0.225177864159,1.43767405578,-1.33299135935, --0.225177864159,1.47231680411,-1.36864933277, --0.225177864159,1.50695955245,-1.40431944732, --0.225177864159,1.54160230078,-1.44001533607, --0.225177864159,1.57624504911,-1.47572570085, --0.225177864159,1.61088779744,-1.51143842188, --0.225177864159,1.64553054577,-1.5471847495, --0.225177864159,1.68017329411,-1.5829428314, --0.225177864159,1.71481604244,-1.61871255716, --0.190535115827,-1.71481604244,1.46180377991, --0.190535115827,-1.68017329411,1.44938227104, --0.190535115827,-1.64553054577,1.43423382418, --0.190535115827,-1.61088779744,1.41693291004, --0.190535115827,-1.57624504911,1.3977896452, --0.190535115827,-1.54160230078,1.37720986423, --0.190535115827,-1.50695955245,1.35532453735, --0.190535115827,-1.47231680411,1.33236337272, --0.190535115827,-1.43767405578,1.30841803559, --0.190535115827,-1.40303130745,1.28365190347, --0.190535115827,-1.36838855912,1.25811447029, --0.190535115827,-1.33374581079,1.23336854979, --0.190535115827,-1.29910306245,1.22870519678, --0.190535115827,-1.26446031412,1.21912116708, --0.190535115827,-1.22981756579,1.20576127945, --0.190535115827,-1.19517481746,1.18937252671, --0.190535115827,-1.16053206913,1.1705267687, --0.190535115827,-1.12588932079,1.14966384259, --0.190535115827,-1.09124657246,1.12710152032, --0.190535115827,-1.05660382413,1.10204837704, --0.190535115827,-1.0219610758,1.07258572616, --0.190535115827,-0.987318327465,1.04285705277, --0.190535115827,-0.952675579133,1.01288021997, --0.190535115827,-0.918032830801,0.982665313617, --0.190535115827,-0.883390082469,0.952241328143, --0.190535115827,-0.848747334136,0.921593268211, --0.190535115827,-0.814104585804,0.890768930486, --0.190535115827,-0.779461837472,0.859742773493, --0.190535115827,-0.74481908914,0.828561300749, --0.190535115827,-0.710176340808,0.79720656406, --0.190535115827,-0.675533592476,0.765682778379, --0.190535115827,-0.640890844144,0.734009264838, --0.190535115827,-0.606248095812,0.702189636931, --0.190535115827,-0.57160534748,0.670226900759, --0.190535115827,-0.536962599148,0.638133665049, --0.190535115827,-0.502319850815,0.605909497073, --0.190535115827,-0.467677102483,0.57355401932, --0.190535115827,-0.433034354151,0.541076172838, --0.190535115827,-0.398391605819,0.508493028785, --0.190535115827,-0.363748857487,0.475790300576, --0.190535115827,-0.329106109155,0.442972358692, --0.190535115827,-0.294463360823,0.410055867964, --0.190535115827,-0.259820612491,0.377026549155, --0.190535115827,-0.225177864159,0.34390872817, --0.190535115827,-0.190535115827,0.310681046524, --0.190535115827,-0.155892367494,0.277360435168, --0.190535115827,-0.121249619162,0.243945074463, --0.190535115827,-0.0866068708302,0.210443616861, --0.190535115827,-0.0519641224981,0.176852575272, --0.190535115827,-0.017321374166,0.143169231244, --0.190535115827,0.017321374166,0.109888983677, --0.190535115827,0.0519641224981,0.0774472140785, --0.190535115827,0.0866068708302,0.043416720559, --0.190535115827,0.121249619162,0.00924101919499, --0.190535115827,0.155892367494,-0.0250039599278, --0.190535115827,0.190535115827,-0.059315709901, --0.190535115827,0.225177864159,-0.0936801967603, --0.190535115827,0.259820612491,-0.12810055248, --0.190535115827,0.294463360823,-0.162597176584, --0.190535115827,0.329106109155,-0.197142240998, --0.190535115827,0.363748857487,-0.231740209597, --0.190535115827,0.398391605819,-0.266390280008, --0.190535115827,0.433034354151,-0.301096888813, --0.190535115827,0.467677102483,-0.335843988022, --0.190535115827,0.502319850815,-0.370646470154, --0.190535115827,0.536962599148,-0.405490003855, --0.190535115827,0.57160534748,-0.44038013188, --0.190535115827,0.606248095812,-0.475312559832, --0.190535115827,0.640890844144,-0.510293599954, --0.190535115827,0.675533592476,-0.54530765152, --0.190535115827,0.710176340808,-0.580356677999, --0.190535115827,0.74481908914,-0.615446291062, --0.190535115827,0.779461837472,-0.65057539748, --0.190535115827,0.814104585804,-0.685738837413, --0.190535115827,0.848747334136,-0.72093512078, --0.190535115827,0.883390082469,-0.756167953733, --0.190535115827,0.918032830801,-0.791430080614, --0.190535115827,0.952675579133,-0.826722449492, --0.190535115827,0.987318327465,-0.862046023419, --0.190535115827,1.0219610758,-0.897396057454, --0.190535115827,1.05660382413,-0.932779165852, --0.190535115827,1.09124657246,-0.968189644892, --0.190535115827,1.12588932079,-1.00361837038, --0.190535115827,1.16053206913,-1.03908865945, --0.190535115827,1.19517481746,-1.07457195228, --0.190535115827,1.22981756579,-1.11008142108, --0.190535115827,1.26446031412,-1.14561577697, --0.190535115827,1.29910306245,-1.18117255426, --0.190535115827,1.33374581079,-1.21675084304, --0.190535115827,1.36838855912,-1.25234743132, --0.190535115827,1.40303130745,-1.28796848437, --0.190535115827,1.43767405578,-1.32360964075, --0.190535115827,1.47231680411,-1.35926702562, --0.190535115827,1.50695955245,-1.39494767772, --0.190535115827,1.54160230078,-1.43064168809, --0.190535115827,1.57624504911,-1.46634990134, --0.190535115827,1.61088779744,-1.50207988677, --0.190535115827,1.64553054577,-1.53783965123, --0.190535115827,1.68017329411,-1.57359220319, --0.190535115827,1.71481604244,-1.60937100694, --0.155892367494,-1.71481604244,1.47012284401, --0.155892367494,-1.68017329411,1.45770111711, --0.155892367494,-1.64553054577,1.44255523558, --0.155892367494,-1.61088779744,1.42525866432, --0.155892367494,-1.57624504911,1.40615948842, --0.155892367494,-1.54160230078,1.38554482439, --0.155892367494,-1.50695955245,1.36366102301, --0.155892367494,-1.47231680411,1.34067961893, --0.155892367494,-1.43767405578,1.31675398485, --0.155892367494,-1.40303130745,1.2919694093, --0.155892367494,-1.36838855912,1.26647116582, --0.155892367494,-1.33374581079,1.24245868697, --0.155892367494,-1.29910306245,1.23779744254, --0.155892367494,-1.26446031412,1.2282169311, --0.155892367494,-1.22981756579,1.21485667094, --0.155892367494,-1.19517481746,1.19846834049, --0.155892367494,-1.16053206913,1.17962529199, --0.155892367494,-1.12588932079,1.15876264365, --0.155892367494,-1.09124657246,1.13620020019, --0.155892367494,-1.05660382413,1.11077491214, --0.155892367494,-1.0219610758,1.08132427343, --0.155892367494,-0.987318327465,1.05160146932, --0.155892367494,-0.952675579133,1.02164069373, --0.155892367494,-0.918032830801,0.991446544274, --0.155892367494,-0.883390082469,0.961024316198, --0.155892367494,-0.848747334136,0.930400892709, --0.155892367494,-0.814104585804,0.89958067118, --0.155892367494,-0.779461837472,0.868588961217, --0.155892367494,-0.74481908914,0.837404356307, --0.155892367494,-0.710176340808,0.806062081204, --0.155892367494,-0.675533592476,0.774550115118, --0.155892367494,-0.640890844144,0.742891176217, --0.155892367494,-0.606248095812,0.711087493506, --0.155892367494,-0.57160534748,0.67914447095, --0.155892367494,-0.536962599148,0.647059847039, --0.155892367494,-0.502319850815,0.614851562347, --0.155892367494,-0.467677102483,0.582505837902, --0.155892367494,-0.433034354151,0.550048127136, --0.155892367494,-0.398391605819,0.517470489026, --0.155892367494,-0.363748857487,0.484784045686, --0.155892367494,-0.329106109155,0.451987178812, --0.155892367494,-0.294463360823,0.419076903075, --0.155892367494,-0.259820612491,0.386060077484, --0.155892367494,-0.225177864159,0.352954866455, --0.155892367494,-0.190535115827,0.319740294143, --0.155892367494,-0.155892367494,0.286428875532, --0.155892367494,-0.121249619162,0.253025339241, --0.155892367494,-0.0866068708302,0.219535054401, --0.155892367494,-0.0519641224981,0.18594928774, --0.155892367494,-0.017321374166,0.152281756067, --0.155892367494,0.017321374166,0.118976014186, --0.155892367494,0.0519641224981,0.086533211825, --0.155892367494,0.0866068708302,0.0526083091323, --0.155892367494,0.121249619162,0.0184353817352, --0.155892367494,0.155892367494,-0.0157972436606, --0.155892367494,0.190535115827,-0.0501064733154, --0.155892367494,0.225177864159,-0.0844775624336, --0.155892367494,0.259820612491,-0.118900285848, --0.155892367494,0.294463360823,-0.153383483711, --0.155892367494,0.329106109155,-0.187923909321, --0.155892367494,0.363748857487,-0.222521695485, --0.155892367494,0.398391605819,-0.257173305449, --0.155892367494,0.433034354151,-0.291874456542, --0.155892367494,0.467677102483,-0.32662530571, --0.155892367494,0.502319850815,-0.361424510215, --0.155892367494,0.536962599148,-0.396268422587, --0.155892367494,0.57160534748,-0.431157827997, --0.155892367494,0.606248095812,-0.466090577034, --0.155892367494,0.640890844144,-0.501062961274, --0.155892367494,0.675533592476,-0.536082249276, --0.155892367494,0.710176340808,-0.571133792224, --0.155892367494,0.74481908914,-0.606234213563, --0.155892367494,0.779461837472,-0.641353797688, --0.155892367494,0.814104585804,-0.676518238353, --0.155892367494,0.848747334136,-0.71171730861, --0.155892367494,0.883390082469,-0.746947768034, --0.155892367494,0.918032830801,-0.782211337398, --0.155892367494,0.952675579133,-0.817507923143, --0.155892367494,0.987318327465,-0.852833538638, --0.155892367494,1.0219610758,-0.888185897593, --0.155892367494,1.05660382413,-0.923577663778, --0.155892367494,1.09124657246,-0.958979965206, --0.155892367494,1.12588932079,-0.99442173795, --0.155892367494,1.16053206913,-1.02989263356, --0.155892367494,1.19517481746,-1.06538098556, --0.155892367494,1.22981756579,-1.10088817262, --0.155892367494,1.26446031412,-1.13642348327, --0.155892367494,1.29910306245,-1.17198367889, --0.155892367494,1.33374581079,-1.20756558227, --0.155892367494,1.36838855912,-1.24316873027, --0.155892367494,1.40303130745,-1.27879325125, --0.155892367494,1.43767405578,-1.31443622266, --0.155892367494,1.47231680411,-1.35010102072, --0.155892367494,1.50695955245,-1.38578149261, --0.155892367494,1.54160230078,-1.4214788586, --0.155892367494,1.57624504911,-1.45719984, --0.155892367494,1.61088779744,-1.49294137354, --0.155892367494,1.64553054577,-1.52868387523, --0.155892367494,1.68017329411,-1.56445252495, --0.155892367494,1.71481604244,-1.60023624435, --0.121249619162,-1.71481604244,1.47827383615, --0.121249619162,-1.68017329411,1.46585461739, --0.121249619162,-1.64553054577,1.45071574513, --0.121249619162,-1.61088779744,1.43342072629, --0.121249619162,-1.57624504911,1.41429274478, --0.121249619162,-1.54160230078,1.39370883396, --0.121249619162,-1.50695955245,1.37183271797, --0.121249619162,-1.47231680411,1.34885238864, --0.121249619162,-1.43767405578,1.32490877845, --0.121249619162,-1.40303130745,1.30010971837, --0.121249619162,-1.36838855912,1.27461846035, --0.121249619162,-1.33374581079,1.25134815294, --0.121249619162,-1.29910306245,1.2466910646, --0.121249619162,-1.26446031412,1.23711163062, --0.121249619162,-1.22981756579,1.2237517435, --0.121249619162,-1.19517481746,1.20736659184, --0.121249619162,-1.16053206913,1.18852161003, --0.121249619162,-1.12588932079,1.16766035909, --0.121249619162,-1.09124657246,1.14509857135, --0.121249619162,-1.05660382413,1.11931275228, --0.121249619162,-1.0219610758,1.0898716265, --0.121249619162,-0.987318327465,1.06017010131, --0.121249619162,-0.952675579133,1.03021564975, --0.121249619162,-0.918032830801,1.00003228117, --0.121249619162,-0.883390082469,0.969630487811, --0.121249619162,-0.848747334136,0.93901065106, --0.121249619162,-0.814104585804,0.908210356939, --0.121249619162,-0.779461837472,0.877226926733, --0.121249619162,-0.74481908914,0.846050609918, --0.121249619162,-0.710176340808,0.81473031339, --0.121249619162,-0.675533592476,0.783230031845, --0.121249619162,-0.640890844144,0.751588042946, --0.121249619162,-0.606248095812,0.719792798161, --0.121249619162,-0.57160534748,0.687864549293, --0.121249619162,-0.536962599148,0.655790270176, --0.121249619162,-0.502319850815,0.623594706068, --0.121249619162,-0.467677102483,0.591272284157, --0.121249619162,-0.433034354151,0.558821221562, --0.121249619162,-0.398391605819,0.526257417904, --0.121249619162,-0.363748857487,0.493583410672, --0.121249619162,-0.329106109155,0.460796777918, --0.121249619162,-0.294463360823,0.427898950413, --0.121249619162,-0.259820612491,0.394897257931, --0.121249619162,-0.225177864159,0.361802880028, --0.121249619162,-0.190535115827,0.328599545493, --0.121249619162,-0.155892367494,0.295301506333, --0.121249619162,-0.121249619162,0.261909641895, --0.121249619162,-0.0866068708302,0.228427948919, --0.121249619162,-0.0519641224981,0.194854236388, --0.121249619162,-0.017321374166,0.161195663198, --0.121249619162,0.017321374166,0.127863133981, --0.121249619162,0.0519641224981,0.0954205020746, --0.121249619162,0.0866068708302,0.0615968639144, --0.121249619162,0.121249619162,0.0274267638763, --0.121249619162,0.155892367494,-0.00680070404435, --0.121249619162,0.190535115827,-0.0410976183938, --0.121249619162,0.225177864159,-0.0754674247698, --0.121249619162,0.259820612491,-0.109889052678, --0.121249619162,0.294463360823,-0.144372923526, --0.121249619162,0.329106109155,-0.178911866831, --0.121249619162,0.363748857487,-0.213508338234, --0.121249619162,0.398391605819,-0.248156068646, --0.121249619162,0.433034354151,-0.28285583565, --0.121249619162,0.467677102483,-0.317602495299, --0.121249619162,0.502319850815,-0.352400884032, --0.121249619162,0.536962599148,-0.38724840183, --0.121249619162,0.57160534748,-0.422132369485, --0.121249619162,0.606248095812,-0.457065833117, --0.121249619162,0.640890844144,-0.492038071761, --0.121249619162,0.675533592476,-0.527052592145, --0.121249619162,0.710176340808,-0.56211651988, --0.121249619162,0.74481908914,-0.597197599019, --0.121249619162,0.779461837472,-0.632337409279, --0.121249619162,0.814104585804,-0.667501299938, --0.121249619162,0.848747334136,-0.702701369438, --0.121249619162,0.883390082469,-0.737934589153, --0.121249619162,0.918032830801,-0.773204178007, --0.121249619162,0.952675579133,-0.808496096152, --0.121249619162,0.987318327465,-0.843825172453, --0.121249619162,1.0219610758,-0.879181212764, --0.121249619162,1.05660382413,-0.914571581256, --0.121249619162,1.09124657246,-0.949982697808, --0.121249619162,1.12588932079,-0.985426844754, --0.121249619162,1.16053206913,-1.02089191202, --0.121249619162,1.19517481746,-1.05637579345, --0.121249619162,1.22981756579,-1.0918979841, --0.121249619162,1.26446031412,-1.12743642717, --0.121249619162,1.29910306245,-1.16300055878, --0.121249619162,1.33374581079,-1.19858645071, --0.121249619162,1.36838855912,-1.23419015443, --0.121249619162,1.40303130745,-1.26981736605, --0.121249619162,1.43767405578,-1.30546859708, --0.121249619162,1.47231680411,-1.34113379683, --0.121249619162,1.50695955245,-1.37682139629, --0.121249619162,1.54160230078,-1.4125284236, --0.121249619162,1.57624504911,-1.44825146449, --0.121249619162,1.61088779744,-1.48398165944, --0.121249619162,1.64553054577,-1.51974023758, --0.121249619162,1.68017329411,-1.55551229226, --0.121249619162,1.71481604244,-1.59129946551, --0.0866068708302,-1.71481604244,1.48627680174, --0.0866068708302,-1.68017329411,1.47385624492, --0.0866068708302,-1.64553054577,1.45872120369, --0.0866068708302,-1.61088779744,1.44138359716, --0.0866068708302,-1.57624504911,1.42230465304, --0.0866068708302,-1.54160230078,1.40167847269, --0.0866068708302,-1.50695955245,1.37981202069, --0.0866068708302,-1.47231680411,1.35682229763, --0.0866068708302,-1.43767405578,1.33289058356, --0.0866068708302,-1.40303130745,1.30809666097, --0.0866068708302,-1.36838855912,1.28256044989, --0.0866068708302,-1.33374581079,1.26004974849, --0.0866068708302,-1.29910306245,1.25539452369, --0.0866068708302,-1.26446031412,1.24581621094, --0.0866068708302,-1.22981756579,1.23245749836, --0.0866068708302,-1.19517481746,1.21607306614, --0.0866068708302,-1.16053206913,1.19723017499, --0.0866068708302,-1.12588932079,1.17636882186, --0.0866068708302,-1.09124657246,1.15380528954, --0.0866068708302,-1.05660382413,1.12767007201, --0.0866068708302,-1.0219610758,1.09824528812, --0.0866068708302,-0.987318327465,1.06855378758, --0.0866068708302,-0.952675579133,1.03860671765, --0.0866068708302,-0.918032830801,1.00843844238, --0.0866068708302,-0.883390082469,0.978050049032, --0.0866068708302,-0.848747334136,0.947450685981, --0.0866068708302,-0.814104585804,0.916654052, --0.0866068708302,-0.779461837472,0.885679855284, --0.0866068708302,-0.74481908914,0.854524001341, --0.0866068708302,-0.710176340808,0.82320136181, --0.0866068708302,-0.675533592476,0.7917281393, --0.0866068708302,-0.640890844144,0.760092800509, --0.0866068708302,-0.606248095812,0.728313768233, --0.0866068708302,-0.57160534748,0.696395913108, --0.0866068708302,-0.536962599148,0.664341171504, --0.0866068708302,-0.502319850815,0.632156840448, --0.0866068708302,-0.467677102483,0.599844675716, --0.0866068708302,-0.433034354151,0.567410471023, --0.0866068708302,-0.398391605819,0.534861572331, --0.0866068708302,-0.363748857487,0.502196588812, --0.0866068708302,-0.329106109155,0.469420710827, --0.0866068708302,-0.294463360823,0.436530706634, --0.0866068708302,-0.259820612491,0.4035464236, --0.0866068708302,-0.225177864159,0.370461291004, --0.0866068708302,-0.190535115827,0.33725979803, --0.0866068708302,-0.155892367494,0.303984223124, --0.0866068708302,-0.121249619162,0.27060077473, --0.0866068708302,-0.0866068708302,0.237127588712, --0.0866068708302,-0.0519641224981,0.203563801793, --0.0866068708302,-0.017321374166,0.169914949056, --0.0866068708302,0.017321374166,0.136558980059, --0.0866068708302,0.0519641224981,0.104117573063, --0.0866068708302,0.0866068708302,0.0703983336722, --0.0866068708302,0.121249619162,0.0362324217205, --0.0866068708302,0.155892367494,0.00200536537286, --0.0866068708302,0.190535115827,-0.0322927360278, --0.0866068708302,0.225177864159,-0.0666565697674, --0.0866068708302,0.259820612491,-0.101076693917, --0.0866068708302,0.294463360823,-0.135558786705, --0.0866068708302,0.329106109155,-0.170094667326, --0.0866068708302,0.363748857487,-0.204688397988, --0.0866068708302,0.398391605819,-0.239333632267, --0.0866068708302,0.433034354151,-0.27403226582, --0.0866068708302,0.467677102483,-0.308781820091, --0.0866068708302,0.502319850815,-0.343578626313, --0.0866068708302,0.536962599148,-0.378421466484, --0.0866068708302,0.57160534748,-0.413311536968, --0.0866068708302,0.606248095812,-0.448239703353, --0.0866068708302,0.640890844144,-0.483220993568, --0.0866068708302,0.675533592476,-0.518237218349, --0.0866068708302,0.710176340808,-0.553295871727, --0.0866068708302,0.74481908914,-0.588379529181, --0.0866068708302,0.779461837472,-0.623515083945, --0.0866068708302,0.814104585804,-0.65868190076, --0.0866068708302,0.848747334136,-0.693881900008, --0.0866068708302,0.883390082469,-0.729119242495, --0.0866068708302,0.918032830801,-0.764385576952, --0.0866068708302,0.952675579133,-0.799683589607, --0.0866068708302,0.987318327465,-0.835012097584, --0.0866068708302,1.0219610758,-0.870372996207, --0.0866068708302,1.05660382413,-0.905762048421, --0.0866068708302,1.09124657246,-0.941177377429, --0.0866068708302,1.12588932079,-0.976612530432, --0.0866068708302,1.16053206913,-1.01209374515, --0.0866068708302,1.19517481746,-1.04757484335, --0.0866068708302,1.22981756579,-1.08309998074, --0.0866068708302,1.26446031412,-1.11864304607, --0.0866068708302,1.29910306245,-1.1542080462, --0.0866068708302,1.33374581079,-1.18979708293, --0.0866068708302,1.36838855912,-1.22540758649, --0.0866068708302,1.40303130745,-1.26103762585, --0.0866068708302,1.43767405578,-1.29668540626, --0.0866068708302,1.47231680411,-1.33235707673, --0.0866068708302,1.50695955245,-1.36804950345, --0.0866068708302,1.54160230078,-1.40375966471, --0.0866068708302,1.57624504911,-1.43948373772, --0.0866068708302,1.61088779744,-1.47522437873, --0.0866068708302,1.64553054577,-1.51098117168, --0.0866068708302,1.68017329411,-1.54676516613, --0.0866068708302,1.71481604244,-1.58255740795, --0.0519641224981,-1.71481604244,1.4940851126, --0.0519641224981,-1.68017329411,1.48167021935, --0.0519641224981,-1.64553054577,1.46654036161, --0.0519641224981,-1.61088779744,1.44920594822, --0.0519641224981,-1.57624504911,1.43008246937, --0.0519641224981,-1.54160230078,1.40951251574, --0.0519641224981,-1.50695955245,1.38759783801, --0.0519641224981,-1.47231680411,1.36462463806, --0.0519641224981,-1.43767405578,1.34067961893, --0.0519641224981,-1.40303130745,1.31588922411, --0.0519641224981,-1.36838855912,1.29041371279, --0.0519641224981,-1.33374581079,1.26857308909, --0.0519641224981,-1.29910306245,1.26390775429, --0.0519641224981,-1.26446031412,1.25433859719, --0.0519641224981,-1.22981756579,1.24098176069, --0.0519641224981,-1.19517481746,1.22459588401, --0.0519641224981,-1.16053206913,1.20575328747, --0.0519641224981,-1.12588932079,1.18489288945, --0.0519641224981,-1.09124657246,1.16233176007, --0.0519641224981,-1.05660382413,1.13585075498, --0.0519641224981,-1.0219610758,1.10643467747, --0.0519641224981,-0.987318327465,1.07676062686, --0.0519641224981,-0.952675579133,1.04682768948, --0.0519641224981,-0.918032830801,1.01667244622, --0.0519641224981,-0.883390082469,0.986291210081, --0.0519641224981,-0.848747334136,0.955708889974, --0.0519641224981,-0.814104585804,0.924930480332, --0.0519641224981,-0.779461837472,0.893968092815, --0.0519641224981,-0.74481908914,0.862816536266, --0.0519641224981,-0.710176340808,0.83151830608, --0.0519641224981,-0.675533592476,0.800044012531, --0.0519641224981,-0.640890844144,0.768425622192, --0.0519641224981,-0.606248095812,0.736658102522, --0.0519641224981,-0.57160534748,0.704749907671, --0.0519641224981,-0.536962599148,0.67271221877, --0.0519641224981,-0.502319850815,0.640536511436, --0.0519641224981,-0.467677102483,0.608241890238, --0.0519641224981,-0.433034354151,0.575817390136, --0.0519641224981,-0.398391605819,0.543276273414, --0.0519641224981,-0.363748857487,0.510623055391, --0.0519641224981,-0.329106109155,0.477866575462, --0.0519641224981,-0.294463360823,0.444991656345, --0.0519641224981,-0.259820612491,0.41201538938, --0.0519641224981,-0.225177864159,0.378938081452, --0.0519641224981,-0.190535115827,0.345750532373, --0.0519641224981,-0.155892367494,0.312480618578, --0.0519641224981,-0.121249619162,0.279112211331, --0.0519641224981,-0.0866068708302,0.245648359205, --0.0519641224981,-0.0519641224981,0.212097273894, --0.0519641224981,-0.017321374166,0.178452271988, --0.0519641224981,0.017321374166,0.14507662256, --0.0519641224981,0.0519641224981,0.112632381545, --0.0519641224981,0.0866068708302,0.0790062109311, --0.0519641224981,0.121249619162,0.0448431367156, --0.0519641224981,0.155892367494,0.010618991322, --0.0519641224981,0.190535115827,-0.0236710220849, --0.0519641224981,0.225177864159,-0.0580226672701, --0.0519641224981,0.259820612491,-0.0924545013783, --0.0519641224981,0.294463360823,-0.12693457544, --0.0519641224981,0.329106109155,-0.161461848723, --0.0519641224981,0.363748857487,-0.196053854314, --0.0519641224981,0.398391605819,-0.230697813267, --0.0519641224981,0.433034354151,-0.265395536361, --0.0519641224981,0.467677102483,-0.300145237602, --0.0519641224981,0.502319850815,-0.334938115701, --0.0519641224981,0.536962599148,-0.369785969327, --0.0519641224981,0.57160534748,-0.404670941604, --0.0519641224981,0.606248095812,-0.439603547575, --0.0519641224981,0.640890844144,-0.474580763091, --0.0519641224981,0.675533592476,-0.509600376007, --0.0519641224981,0.710176340808,-0.544648479303, --0.0519641224981,0.74481908914,-0.579751119142, --0.0519641224981,0.779461837472,-0.614878728603, --0.0519641224981,0.814104585804,-0.650046483705, --0.0519641224981,0.848747334136,-0.685250505042, --0.0519641224981,0.883390082469,-0.720486034591, --0.0519641224981,0.918032830801,-0.755756577902, --0.0519641224981,0.952675579133,-0.791056598692, --0.0519641224981,0.987318327465,-0.826386045902, --0.0519641224981,1.0219610758,-0.861745677068, --0.0519641224981,1.05660382413,-0.897140633885, --0.0519641224981,1.09124657246,-0.932556123954, --0.0519641224981,1.12588932079,-0.967996464192, --0.0519641224981,1.16053206913,-1.00347456215, --0.0519641224981,1.19517481746,-1.03896874171, --0.0519641224981,1.22981756579,-1.07449031465, --0.0519641224981,1.26446031412,-1.11003521683, --0.0519641224981,1.29910306245,-1.14560418549, --0.0519641224981,1.33374581079,-1.18119327599, --0.0519641224981,1.36838855912,-1.21680847318, --0.0519641224981,1.40303130745,-1.25244066225, --0.0519641224981,1.43767405578,-1.2880971807, --0.0519641224981,1.47231680411,-1.32377005663, --0.0519641224981,1.50695955245,-1.35946662058, --0.0519641224981,1.54160230078,-1.39517577673, --0.0519641224981,1.57624504911,-1.43090188847, --0.0519641224981,1.61088779744,-1.4666602482, --0.0519641224981,1.64553054577,-1.50241641001, --0.0519641224981,1.68017329411,-1.53820096146, --0.0519641224981,1.71481604244,-1.57399689238, --0.017321374166,-1.71481604244,1.50171526305, --0.017321374166,-1.68017329411,1.48930607258, --0.017321374166,-1.64553054577,1.47418259438, --0.017321374166,-1.61088779744,1.45685354149, --0.017321374166,-1.57624504911,1.43776812764, --0.017321374166,-1.54160230078,1.41715842331, --0.017321374166,-1.50695955245,1.39525270274, --0.017321374166,-1.47231680411,1.37227848868, --0.017321374166,-1.43767405578,1.34833876731, --0.017321374166,-1.40303130745,1.32355731962, --0.017321374166,-1.36838855912,1.29802481359, --0.017321374166,-1.33374581079,1.27691952084, --0.017321374166,-1.29910306245,1.27225260636, --0.017321374166,-1.26446031412,1.26268421916, --0.017321374166,-1.22981756579,1.24932973546, --0.017321374166,-1.19517481746,1.23294498903, --0.017321374166,-1.16053206913,1.21410388663, --0.017321374166,-1.12588932079,1.19324309382, --0.017321374166,-1.09124657246,1.1706820165, --0.017321374166,-1.05660382413,1.14387685768, --0.017321374166,-1.0219610758,1.11446913991, --0.017321374166,-0.987318327465,1.08480301989, --0.017321374166,-0.952675579133,1.05487971701, --0.017321374166,-0.918032830801,1.02472824634, --0.017321374166,-0.883390082469,0.994361635787, --0.017321374166,-0.848747334136,0.963793284318, --0.017321374166,-0.814104585804,0.933025492252, --0.017321374166,-0.779461837472,0.902073790922, --0.017321374166,-0.74481908914,0.870949936616, --0.017321374166,-0.710176340808,0.839653412242, --0.017321374166,-0.675533592476,0.808193161513, --0.017321374166,-0.640890844144,0.776584364942, --0.017321374166,-0.606248095812,0.74483302428, --0.017321374166,-0.57160534748,0.712939874298, --0.017321374166,-0.536962599148,0.68091094645, --0.017321374166,-0.502319850815,0.648749848635, --0.017321374166,-0.467677102483,0.616465980744, --0.017321374166,-0.433034354151,0.584049717687, --0.017321374166,-0.398391605819,0.551523500862, --0.017321374166,-0.363748857487,0.51888678642, --0.017321374166,-0.329106109155,0.486132249787, --0.017321374166,-0.294463360823,0.453277155339, --0.017321374166,-0.259820612491,0.420311493942, --0.017321374166,-0.225177864159,0.387240738217, --0.017321374166,-0.190535115827,0.354077771859, --0.017321374166,-0.155892367494,0.320807064525, --0.017321374166,-0.121249619162,0.287448656032, --0.017321374166,-0.0866068708302,0.253991488357, --0.017321374166,-0.0519641224981,0.220447599844, --0.017321374166,-0.017321374166,0.186815008717, --0.017321374166,0.017321374166,0.153418260422, --0.017321374166,0.0519641224981,0.120978007923, --0.017321374166,0.0866068708302,0.0874423253541, --0.017321374166,0.121249619162,0.0532833232059, --0.017321374166,0.155892367494,0.0190578864556, --0.017321374166,0.190535115827,-0.0152251721716, --0.017321374166,0.225177864159,-0.0495852179275, --0.017321374166,0.259820612491,-0.0839989107787, --0.017321374166,0.294463360823,-0.118479384964, --0.017321374166,0.329106109155,-0.153008157649, --0.017321374166,0.363748857487,-0.187597168978, --0.017321374166,0.398391605819,-0.222243979943, --0.017321374166,0.433034354151,-0.256937941446, --0.017321374166,0.467677102483,-0.291685371326, --0.017321374166,0.502319850815,-0.326482466462, --0.017321374166,0.536962599148,-0.361327593796, --0.017321374166,0.57160534748,-0.396210872768, --0.017321374166,0.606248095812,-0.43114928248, --0.017321374166,0.640890844144,-0.466121036765, --0.017321374166,0.675533592476,-0.50113535661, --0.017321374166,0.710176340808,-0.536196986608, --0.017321374166,0.74481908914,-0.571287246113, --0.017321374166,0.779461837472,-0.606422769316, --0.017321374166,0.814104585804,-0.641592507706, --0.017321374166,0.848747334136,-0.676796446901, --0.017321374166,0.883390082469,-0.712034644172, --0.017321374166,0.918032830801,-0.747305060326, --0.017321374166,0.952675579133,-0.782607551399, --0.017321374166,0.987318327465,-0.81793926229, --0.017321374166,1.0219610758,-0.853305946253, --0.017321374166,1.05660382413,-0.888691277873, --0.017321374166,1.09124657246,-0.92411152416, --0.017321374166,1.12588932079,-0.959557945081, --0.017321374166,1.16053206913,-0.995041342801, --0.017321374166,1.19517481746,-1.03053231802, --0.017321374166,1.22981756579,-1.0660649467, --0.017321374166,1.26446031412,-1.10160531395, --0.017321374166,1.29910306245,-1.13717819053, --0.017321374166,1.33374581079,-1.1727707063, --0.017321374166,1.36838855912,-1.20838541742, --0.017321374166,1.40303130745,-1.24402386205, --0.017321374166,1.43767405578,-1.27968389341, --0.017321374166,1.47231680411,-1.31535786917, --0.017321374166,1.50695955245,-1.35105666366, --0.017321374166,1.54160230078,-1.38676915456, --0.017321374166,1.57624504911,-1.42250954113, --0.017321374166,1.61088779744,-1.45825353721, --0.017321374166,1.64553054577,-1.49402101834, --0.017321374166,1.68017329411,-1.5298180386, --0.017321374166,1.71481604244,-1.56561065093, -0.017321374166,-1.71481604244,1.50921780941, -0.017321374166,-1.68017329411,1.49681064109, -0.017321374166,-1.64553054577,1.48168388256, -0.017321374166,-1.61088779744,1.46435711329, -0.017321374166,-1.57624504911,1.44524666121, -0.017321374166,-1.54160230078,1.42463509364, -0.017321374166,-1.50695955245,1.40277024189, -0.017321374166,-1.47231680411,1.37975556022, -0.017321374166,-1.43767405578,1.35582078492, -0.017321374166,-1.40303130745,1.33104649702, -0.017321374166,-1.36838855912,1.30552344711, -0.017321374166,-1.33374581079,1.28508008119, -0.017321374166,-1.29910306245,1.28043349934, -0.017321374166,-1.26446031412,1.27086610892, -0.017321374166,-1.22981756579,1.25750859681, -0.017321374166,-1.19517481746,1.24112501579, -0.017321374166,-1.16053206913,1.22228379069, -0.017321374166,-1.12588932079,1.2014236004, -0.017321374166,-1.09124657246,1.178863219, -0.017321374166,-1.05660382413,1.15172949211, -0.017321374166,-1.0219610758,1.1223420884, -0.017321374166,-0.987318327465,1.09268283552, -0.017321374166,-0.952675579133,1.06277519877, -0.017321374166,-0.918032830801,1.03263265282, -0.017321374166,-0.883390082469,1.0022830288, -0.017321374166,-0.848747334136,0.971719802989, -0.017321374166,-0.814104585804,0.940957242437, -0.017321374166,-0.779461837472,0.910016830703, -0.017321374166,-0.74481908914,0.878903208668, -0.017321374166,-0.710176340808,0.847630548899, -0.017321374166,-0.675533592476,0.816191223631, -0.017321374166,-0.640890844144,0.784587015401, -0.017321374166,-0.606248095812,0.752840346001, -0.017321374166,-0.57160534748,0.720963219329, -0.017321374166,-0.536962599148,0.688944418429, -0.017321374166,-0.502319850815,0.65679521, -0.017321374166,-0.467677102483,0.624524045399, -0.017321374166,-0.433034354151,0.592120195814, -0.017321374166,-0.398391605819,0.559603200301, -0.017321374166,-0.363748857487,0.526978440741, -0.017321374166,-0.329106109155,0.494234453911, -0.017321374166,-0.294463360823,0.461383957899, -0.017321374166,-0.259820612491,0.428429319893, -0.017321374166,-0.225177864159,0.395376293177, -0.017321374166,-0.190535115827,0.362213108196, -0.017321374166,-0.155892367494,0.328962003991, -0.017321374166,-0.121249619162,0.29561478846, -0.017321374166,-0.0866068708302,0.262169912797, -0.017321374166,-0.0519641224981,0.228632645454, -0.017321374166,-0.017321374166,0.195006204895, -0.017321374166,0.017321374166,0.161591049991, -0.017321374166,0.0519641224981,0.129150026623, -0.017321374166,0.0866068708302,0.0957003925917, -0.017321374166,0.121249619162,0.0615517319826, -0.017321374166,0.155892367494,0.0273288209531, -0.017321374166,0.190535115827,-0.00695884710115, -0.017321374166,0.225177864159,-0.041309907912, -0.017321374166,0.259820612491,-0.0757189545899, -0.017321374166,0.294463360823,-0.110187157679, -0.017321374166,0.329106109155,-0.144726344012, -0.017321374166,0.363748857487,-0.179316184142, -0.017321374166,0.398391605819,-0.213958691083, -0.017321374166,0.433034354151,-0.24865571379, -0.017321374166,0.467677102483,-0.283399393529, -0.017321374166,0.502319850815,-0.318193967916, -0.017321374166,0.536962599148,-0.353039337378, -0.017321374166,0.57160534748,-0.38792393145, -0.017321374166,0.606248095812,-0.422861131171, -0.017321374166,0.640890844144,-0.457834417374, -0.017321374166,0.675533592476,-0.492847382535, -0.017321374166,0.710176340808,-0.527904621498, -0.017321374166,0.74481908914,-0.562998775983, -0.017321374166,0.779461837472,-0.598149548733, -0.017321374166,0.814104585804,-0.6333101352, -0.017321374166,0.848747334136,-0.668515442222, -0.017321374166,0.883390082469,-0.703754220946, -0.017321374166,0.918032830801,-0.739023962323, -0.017321374166,0.952675579133,-0.774329325376, -0.017321374166,0.987318327465,-0.809664463153, -0.017321374166,1.0219610758,-0.845025784356, -0.017321374166,1.05660382413,-0.880423220664, -0.017321374166,1.09124657246,-0.915845927132, -0.017321374166,1.12588932079,-0.951289871321, -0.017321374166,1.16053206913,-0.986772745225, -0.017321374166,1.19517481746,-1.02227516088, -0.017321374166,1.22981756579,-1.05779903707, -0.017321374166,1.26446031412,-1.09334840939, -0.017321374166,1.29910306245,-1.12892289138, -0.017321374166,1.33374581079,-1.16451861925, -0.017321374166,1.36838855912,-1.20013524598, -0.017321374166,1.40303130745,-1.23577524293, -0.017321374166,1.43767405578,-1.27143868618, -0.017321374166,1.47231680411,-1.30712009295, -0.017321374166,1.50695955245,-1.34282066635, -0.017321374166,1.54160230078,-1.3785417924, -0.017321374166,1.57624504911,-1.41427627731, -0.017321374166,1.61088779744,-1.45002543006, -0.017321374166,1.64553054577,-1.48580425981, -0.017321374166,1.68017329411,-1.52158280936, -0.017321374166,1.71481604244,-1.55739625354, -0.0519641224981,-1.71481604244,1.51659643735, -0.0519641224981,-1.68017329411,1.50418799314, -0.0519641224981,-1.64553054577,1.48906907826, -0.0519641224981,-1.61088779744,1.47174359767, -0.0519641224981,-1.57624504911,1.45262477038, -0.0519641224981,-1.54160230078,1.43198554694, -0.0519641224981,-1.50695955245,1.41012596694, -0.0519641224981,-1.47231680411,1.38711920541, -0.0519641224981,-1.43767405578,1.36318362049, -0.0519641224981,-1.40303130745,1.33840740386, -0.0519641224981,-1.36838855912,1.31289601283, -0.0519641224981,-1.33374581079,1.29309809702, -0.0519641224981,-1.29910306245,1.28845658403, -0.0519641224981,-1.26446031412,1.27887924487, -0.0519641224981,-1.22981756579,1.26552112018, -0.0519641224981,-1.19517481746,1.24914485163, -0.0519641224981,-1.16053206913,1.23030464133, -0.0519641224981,-1.12588932079,1.20944383129, -0.0519641224981,-1.09124657246,1.18688209862, -0.0519641224981,-1.05660382413,1.15943665622, -0.0519641224981,-1.0219610758,1.13005621048, -0.0519641224981,-0.987318327465,1.1004067339, -0.0519641224981,-0.952675579133,1.07050971619, -0.0519641224981,-0.918032830801,1.04038501817, -0.0519641224981,-0.883390082469,1.01003948229, -0.0519641224981,-0.848747334136,0.979494488575, -0.0519641224981,-0.814104585804,0.948741822412, -0.0519641224981,-0.779461837472,0.917814772467, -0.0519641224981,-0.74481908914,0.886710510459, -0.0519641224981,-0.710176340808,0.855440665298, -0.0519641224981,-0.675533592476,0.824008313847, -0.0519641224981,-0.640890844144,0.792424928473, -0.0519641224981,-0.606248095812,0.760696588473, -0.0519641224981,-0.57160534748,0.728823950265, -0.0519641224981,-0.536962599148,0.696822545236, -0.0519641224981,-0.502319850815,0.664683348504, -0.0519641224981,-0.467677102483,0.63241824493, -0.0519641224981,-0.433034354151,0.600029707529, -0.0519641224981,-0.398391605819,0.567528360976, -0.0519641224981,-0.363748857487,0.53491257718, -0.0519641224981,-0.329106109155,0.502188027418, -0.0519641224981,-0.294463360823,0.469340188505, -0.0519641224981,-0.259820612491,0.436400473514, -0.0519641224981,-0.225177864159,0.403351359481, -0.0519641224981,-0.190535115827,0.370198803449, -0.0519641224981,-0.155892367494,0.336969913022, -0.0519641224981,-0.121249619162,0.303619797089, -0.0519641224981,-0.0866068708302,0.27018449737, -0.0519641224981,-0.0519641224981,0.236655530602, -0.0519641224981,-0.017321374166,0.203040340341, -0.0519641224981,0.017321374166,0.169606133221, -0.0519641224981,0.0519641224981,0.137160889741, -0.0519641224981,0.0866068708302,0.103800214906, -0.0519641224981,0.121249619162,0.0696479755068, -0.0519641224981,0.155892367494,0.0354296327072, -0.0519641224981,0.190535115827,0.00114582481019, -0.0519641224981,0.225177864159,-0.0332030279287, -0.0519641224981,0.259820612491,-0.0676073745608, -0.0519641224981,0.294463360823,-0.102085846741, -0.0519641224981,0.329106109155,-0.136615584668, -0.0519641224981,0.363748857487,-0.171196523384, -0.0519641224981,0.398391605819,-0.205841144377, -0.0519641224981,0.433034354151,-0.240534955824, -0.0519641224981,0.467677102483,-0.275280261425, -0.0519641224981,0.502319850815,-0.310075767231, -0.0519641224981,0.536962599148,-0.344914597781, -0.0519641224981,0.57160534748,-0.37980316496, -0.0519641224981,0.606248095812,-0.414740834347, -0.0519641224981,0.640890844144,-0.449713953845, -0.0519641224981,0.675533592476,-0.48472905125, -0.0519641224981,0.710176340808,-0.519792521687, -0.0519641224981,0.74481908914,-0.554894228462, -0.0519641224981,0.779461837472,-0.590019168502, -0.0519641224981,0.814104585804,-0.625192578566, -0.0519641224981,0.848747334136,-0.660397885769, -0.0519641224981,0.883390082469,-0.695638046066, -0.0519641224981,0.918032830801,-0.730910377843, -0.0519641224981,0.952675579133,-0.766215213381, -0.0519641224981,0.987318327465,-0.801554799035, -0.0519641224981,1.0219610758,-0.836918752432, -0.0519641224981,1.05660382413,-0.872313467278, -0.0519641224981,1.09124657246,-0.907742687908, -0.0519641224981,1.12588932079,-0.9431855549, -0.0519641224981,1.16053206913,-0.978662753435, -0.0519641224981,1.19517481746,-1.0141743864, -0.0519641224981,1.22981756579,-1.04969438019, -0.0519641224981,1.26446031412,-1.08525319145, -0.0519641224981,1.29910306245,-1.12082897654, -0.0519641224981,1.33374581079,-1.1564302848, -0.0519641224981,1.36838855912,-1.19205094826, -0.0519641224981,1.40303130745,-1.22769267523, -0.0519641224981,1.43767405578,-1.26335508882, -0.0519641224981,1.47231680411,-1.29904333707, -0.0519641224981,1.50695955245,-1.33474409632, -0.0519641224981,1.54160230078,-1.3704683263, -0.0519641224981,1.57624504911,-1.40620710808, -0.0519641224981,1.61088779744,-1.44196820947, -0.0519641224981,1.64553054577,-1.47774347746, -0.0519641224981,1.68017329411,-1.51352669328, -0.0519641224981,1.71481604244,-1.5493424813, -0.0866068708302,-1.71481604244,1.52377146184, -0.0866068708302,-1.68017329411,1.51137123424, -0.0866068708302,-1.64553054577,1.49625192905, -0.0866068708302,-1.61088779744,1.47893275212, -0.0866068708302,-1.57624504911,1.45981990244, -0.0866068708302,-1.54160230078,1.43921363791, -0.0866068708302,-1.50695955245,1.41731801026, -0.0866068708302,-1.47231680411,1.39436142356, -0.0866068708302,-1.43767405578,1.37038307132, -0.0866068708302,-1.40303130745,1.3456173583, -0.0866068708302,-1.36838855912,1.32010083977, -0.0866068708302,-1.33374581079,1.30096103608, -0.0866068708302,-1.29910306245,1.2963106381, -0.0866068708302,-1.26446031412,1.28674856239, -0.0866068708302,-1.22981756579,1.27338173825, -0.0866068708302,-1.19517481746,1.25700852258, -0.0866068708302,-1.16053206913,1.2381678631, -0.0866068708302,-1.12588932079,1.21730737363, -0.0866068708302,-1.09124657246,1.19474780374, -0.0866068708302,-1.05660382413,1.16699382956, -0.0866068708302,-1.0219610758,1.13762181565, -0.0866068708302,-0.987318327465,1.1079852781, -0.0866068708302,-0.952675579133,1.07810504255, -0.0866068708302,-0.918032830801,1.04798531317, -0.0866068708302,-0.883390082469,1.01765163194, -0.0866068708302,-0.848747334136,0.987115212001, -0.0866068708302,-0.814104585804,0.95638440656, -0.0866068708302,-0.779461837472,0.925461921197, -0.0866068708302,-0.74481908914,0.894376836146, -0.0866068708302,-0.710176340808,0.863105484872, -0.0866068708302,-0.675533592476,0.831686945534, -0.0866068708302,-0.640890844144,0.800122813621, -0.0866068708302,-0.606248095812,0.768397985061, -0.0866068708302,-0.57160534748,0.736539551132, -0.0866068708302,-0.536962599148,0.704548038782, -0.0866068708302,-0.502319850815,0.672416619494, -0.0866068708302,-0.467677102483,0.640172692804, -0.0866068708302,-0.433034354151,0.607789759386, -0.0866068708302,-0.398391605819,0.575298689488, -0.0866068708302,-0.363748857487,0.542688170894, -0.0866068708302,-0.329106109155,0.509973211598, -0.0866068708302,-0.294463360823,0.477151013626, -0.0866068708302,-0.259820612491,0.444206862557, -0.0866068708302,-0.225177864159,0.41117216423, -0.0866068708302,-0.190535115827,0.378039852294, -0.0866068708302,-0.155892367494,0.344803813753, -0.0866068708302,-0.121249619162,0.311469914143, -0.0866068708302,-0.0866068708302,0.278041756915, -0.0866068708302,-0.0519641224981,0.244525615089, -0.0866068708302,-0.017321374166,0.210915924768, -0.0866068708302,0.017321374166,0.177465090669, -0.0866068708302,0.0519641224981,0.145016820116, -0.0866068708302,0.0866068708302,0.111735738823, -0.0866068708302,0.121249619162,0.0775932287025, -0.0866068708302,0.155892367494,0.0433838110957, -0.0866068708302,0.190535115827,0.0091046542379, -0.0866068708302,0.225177864159,-0.0252462072333, -0.0866068708302,0.259820612491,-0.0596573592975, -0.0866068708302,0.294463360823,-0.0941174311038, -0.0866068708302,0.329106109155,-0.128657229836, -0.0866068708302,0.363748857487,-0.163239030795, -0.0866068708302,0.398391605819,-0.197879204608, -0.0866068708302,0.433034354151,-0.232572867853, -0.0866068708302,0.467677102483,-0.267317544749, -0.0866068708302,0.502319850815,-0.302111805907, -0.0866068708302,0.536962599148,-0.336952513346, -0.0866068708302,0.57160534748,-0.371842031694, -0.0866068708302,0.606248095812,-0.406774081629, -0.0866068708302,0.640890844144,-0.441753106036, -0.0866068708302,0.675533592476,-0.476773423013, -0.0866068708302,0.710176340808,-0.511827087249, -0.0866068708302,0.74481908914,-0.546919638069, -0.0866068708302,0.779461837472,-0.582058330663, -0.0866068708302,0.814104585804,-0.617233442775, -0.0866068708302,0.848747334136,-0.652440082545, -0.0866068708302,0.883390082469,-0.687682813981, -0.0866068708302,0.918032830801,-0.722957597568, -0.0866068708302,0.952675579133,-0.758263181305, -0.0866068708302,0.987318327465,-0.793603820858, -0.0866068708302,1.0219610758,-0.828971412124, -0.0866068708302,1.05660382413,-0.864363579989, -0.0866068708302,1.09124657246,-0.899795656737, -0.0866068708302,1.12588932079,-0.935248958261, -0.0866068708302,1.16053206913,-0.970730119806, -0.0866068708302,1.19517481746,-1.00622451426, -0.0866068708302,1.22981756579,-1.04176231736, -0.0866068708302,1.26446031412,-1.07731770612, -0.0866068708302,1.29910306245,-1.11289778295, -0.0866068708302,1.33374581079,-1.14849642229, -0.0866068708302,1.36838855912,-1.18412243065, -0.0866068708302,1.40303130745,-1.21976536798, -0.0866068708302,1.43767405578,-1.25543197193, -0.0866068708302,1.47231680411,-1.29112154204, -0.0866068708302,1.50695955245,-1.32682815643, -0.0866068708302,1.54160230078,-1.36255193957, -0.0866068708302,1.57624504911,-1.3982956106, -0.0866068708302,1.61088779744,-1.43406264125, -0.0866068708302,1.64553054577,-1.46983314269, -0.0866068708302,1.68017329411,-1.50562444088, -0.0866068708302,1.71481604244,-1.54144530834, -0.121249619162,-1.71481604244,1.53088353837, -0.121249619162,-1.68017329411,1.51848536799, -0.121249619162,-1.64553054577,1.50332412178, -0.121249619162,-1.61088779744,1.48600949095, -0.121249619162,-1.57624504911,1.46689338875, -0.121249619162,-1.54160230078,1.44629866644, -0.121249619162,-1.50695955245,1.42439962661, -0.121249619162,-1.47231680411,1.40139445915, -0.121249619162,-1.43767405578,1.37747273001, -0.121249619162,-1.40303130745,1.35270880124, -0.121249619162,-1.36838855912,1.32719017572, -0.121249619162,-1.33374581079,1.30867476903, -0.121249619162,-1.29910306245,1.30401949127, -0.121249619162,-1.26446031412,1.2944614814, -0.121249619162,-1.22981756579,1.28109597836, -0.121249619162,-1.19517481746,1.26472600072, -0.121249619162,-1.16053206913,1.24588179214, -0.121249619162,-1.12588932079,1.22502269638, -0.121249619162,-1.09124657246,1.20246328246, -0.121249619162,-1.05660382413,1.17441316772, -0.121249619162,-1.0219610758,1.14505185646, -0.121249619162,-0.987318327465,1.11542387239, -0.121249619162,-0.952675579133,1.08555143545, -0.121249619162,-0.918032830801,1.05544520471, -0.121249619162,-0.883390082469,1.02511821031, -0.121249619162,-0.848747334136,0.994595759862, -0.121249619162,-0.814104585804,0.963872346593, -0.121249619162,-0.779461837472,0.932964125664, -0.121249619162,-0.74481908914,0.901883097089, -0.121249619162,-0.710176340808,0.870630232052, -0.121249619162,-0.675533592476,0.839231580029, -0.121249619162,-0.640890844144,0.807662487657, -0.121249619162,-0.606248095812,0.775957369864, -0.121249619162,-0.57160534748,0.744107333474, -0.121249619162,-0.536962599148,0.712123749335, -0.121249619162,-0.502319850815,0.680008262818, -0.121249619162,-0.467677102483,0.647770946639, -0.121249619162,-0.433034354151,0.615410725029, -0.121249619162,-0.398391605819,0.582920223201, -0.121249619162,-0.363748857487,0.550325156699, -0.121249619162,-0.329106109155,0.517621292456, -0.121249619162,-0.294463360823,0.484802702709, -0.121249619162,-0.259820612491,0.451877480599, -0.121249619162,-0.225177864159,0.418844578035, -0.121249619162,-0.190535115827,0.385725823796, -0.121249619162,-0.155892367494,0.352489626177, -0.121249619162,-0.121249619162,0.31917312866, -0.121249619162,-0.0866068708302,0.285755290232, -0.121249619162,-0.0519641224981,0.25224262981, -0.121249619162,-0.017321374166,0.218642650587, -0.121249619162,0.017321374166,0.18516982793, -0.121249619162,0.0519641224981,0.152728485867, -0.121249619162,0.0866068708302,0.119525003473, -0.121249619162,0.121249619162,0.0853860411697, -0.121249619162,0.155892367494,0.0511802552216, -0.121249619162,0.190535115827,0.0168941489451, -0.121249619162,0.225177864159,-0.0174454441889, -0.121249619162,0.259820612491,-0.0518493466729, -0.121249619162,0.294463360823,-0.0863255336482, -0.121249619162,0.329106109155,-0.120851463094, -0.121249619162,0.363748857487,-0.155430673687, -0.121249619162,0.398391605819,-0.190069760963, -0.121249619162,0.433034354151,-0.224763396695, -0.121249619162,0.467677102483,-0.259505442333, -0.121249619162,0.502319850815,-0.294300878597, -0.121249619162,0.536962599148,-0.329146587888, -0.121249619162,0.57160534748,-0.364034369317, -0.121249619162,0.606248095812,-0.398962691039, -0.121249619162,0.640890844144,-0.433945712937, -0.121249619162,0.675533592476,-0.468963684891, -0.121249619162,0.710176340808,-0.504015847621, -0.121249619162,0.74481908914,-0.539115833408, -0.121249619162,0.779461837472,-0.574259770866, -0.121249619162,0.814104585804,-0.609426695864, -0.121249619162,0.848747334136,-0.644635849631, -0.121249619162,0.883390082469,-0.679879289966, -0.121249619162,0.918032830801,-0.715155843085, -0.121249619162,0.952675579133,-0.750462647828, -0.121249619162,0.987318327465,-0.785800535939, -0.121249619162,1.0219610758,-0.821171714742, -0.121249619162,1.05660382413,-0.856574311909, -0.121249619162,1.09124657246,-0.891999020722, -0.121249619162,1.12588932079,-0.927453207021, -0.121249619162,1.16053206913,-0.962931342814, -0.121249619162,1.19517481746,-0.998448372296, -0.121249619162,1.22981756579,-1.03397847731, -0.121249619162,1.26446031412,-1.06953970708, -0.121249619162,1.29910306245,-1.10511324845, -0.121249619162,1.33374581079,-1.14071703963, -0.121249619162,1.36838855912,-1.1763438869, -0.121249619162,1.40303130745,-1.21199159014, -0.121249619162,1.43767405578,-1.24766299733, -0.121249619162,1.47231680411,-1.28334897753, -0.121249619162,1.50695955245,-1.31905965946, -0.121249619162,1.54160230078,-1.35478665578, -0.121249619162,1.57624504911,-1.39053573239, -0.121249619162,1.61088779744,-1.4263033248, -0.121249619162,1.64553054577,-1.46208180042, -0.121249619162,1.68017329411,-1.49788686756, -0.121249619162,1.71481604244,-1.53369091014, -0.155892367494,-1.71481604244,1.53780119748, -0.155892367494,-1.68017329411,1.52540788627, -0.155892367494,-1.64553054577,1.51029441456, -0.155892367494,-1.61088779744,1.4929768058, -0.155892367494,-1.57624504911,1.47387044495, -0.155892367494,-1.54160230078,1.45323093847, -0.155892367494,-1.50695955245,1.43133857623, -0.155892367494,-1.47231680411,1.40837810852, -0.155892367494,-1.43767405578,1.38441115774, -0.155892367494,-1.40303130745,1.35964789355, -0.155892367494,-1.36838855912,1.33409657657, -0.155892367494,-1.33374581079,1.31624484014, -0.155892367494,-1.29910306245,1.31158826599, -0.155892367494,-1.26446031412,1.30202432374, -0.155892367494,-1.22981756579,1.28866907858, -0.155892367494,-1.19517481746,1.27229098516, -0.155892367494,-1.16053206913,1.25345408723, -0.155892367494,-1.12588932079,1.23259523412, -0.155892367494,-1.09124657246,1.21003418557, -0.155892367494,-1.05660382413,1.1816935945, -0.155892367494,-1.0219610758,1.15234059843, -0.155892367494,-0.987318327465,1.12272361118, -0.155892367494,-0.952675579133,1.0928595731, -0.155892367494,-0.918032830801,1.06276441335, -0.155892367494,-0.883390082469,1.03245738358, -0.155892367494,-0.848747334136,1.00194118184, -0.155892367494,-0.814104585804,0.971229136343, -0.155892367494,-0.779461837472,0.940326894461, -0.155892367494,-0.74481908914,0.90925938128, -0.155892367494,-0.710176340808,0.878019858971, -0.155892367494,-0.675533592476,0.846615169591, -0.155892367494,-0.640890844144,0.815078233896, -0.155892367494,-0.606248095812,0.783373413246, -0.155892367494,-0.57160534748,0.751537989819, -0.155892367494,-0.536962599148,0.719567278646, -0.155892367494,-0.502319850815,0.687459827617, -0.155892367494,-0.467677102483,0.655231599286, -0.155892367494,-0.433034354151,0.622878372411, -0.155892367494,-0.398391605819,0.590404188997, -0.155892367494,-0.363748857487,0.557821594066, -0.155892367494,-0.329106109155,0.525121360585, -0.155892367494,-0.294463360823,0.492310978034, -0.155892367494,-0.259820612491,0.459405945318, -0.155892367494,-0.225177864159,0.426386584955, -0.155892367494,-0.190535115827,0.393262950218, -0.155892367494,-0.155892367494,0.360050090852, -0.155892367494,-0.121249619162,0.326730690086, -0.155892367494,-0.0866068708302,0.293320457031, -0.155892367494,-0.0519641224981,0.259818188254, -0.155892367494,-0.017321374166,0.226225997704, -0.155892367494,0.017321374166,0.192738265392, -0.155892367494,0.0519641224981,0.160291657611, -0.155892367494,0.0866068708302,0.127167631063, -0.155892367494,0.121249619162,0.0930321436041, -0.155892367494,0.155892367494,0.0588252650429, -0.155892367494,0.190535115827,0.0245489749731, -0.155892367494,0.225177864159,-0.00979463042968, -0.155892367494,0.259820612491,-0.0441914496598, -0.155892367494,0.294463360823,-0.0786567307641, -0.155892367494,0.329106109155,-0.113192564914, -0.155892367494,0.363748857487,-0.147770339217, -0.155892367494,0.398391605819,-0.182409617449, -0.155892367494,0.433034354151,-0.217100827509, -0.155892367494,0.467677102483,-0.251845521665, -0.155892367494,0.502319850815,-0.286637227989, -0.155892367494,0.536962599148,-0.32148076169, -0.155892367494,0.57160534748,-0.356368456374, -0.155892367494,0.606248095812,-0.39130065207, -0.155892367494,0.640890844144,-0.42627762125, -0.155892367494,0.675533592476,-0.461294856831, -0.155892367494,0.710176340808,-0.496364706487, -0.155892367494,0.74481908914,-0.53146109034, -0.155892367494,0.779461837472,-0.56660003036, -0.155892367494,0.814104585804,-0.601764659746, -0.155892367494,0.848747334136,-0.636979357127, -0.155892367494,0.883390082469,-0.672221845756, -0.155892367494,0.918032830801,-0.707499556782, -0.155892367494,0.952675579133,-0.742808001192, -0.155892367494,0.987318327465,-0.778149215992, -0.155892367494,1.0219610758,-0.813520100208, -0.155892367494,1.05660382413,-0.84891891015, -0.155892367494,1.09124657246,-0.884347280115, -0.155892367494,1.12588932079,-0.919803354924, -0.155892367494,1.16053206913,-0.955296733191, -0.155892367494,1.19517481746,-0.990797363239, -0.155892367494,1.22981756579,-1.02633756955, -0.155892367494,1.26446031412,-1.06189945992, -0.155892367494,1.29910306245,-1.09747939602, -0.155892367494,1.33374581079,-1.1330861563, -0.155892367494,1.36838855912,-1.16871307235, -0.155892367494,1.40303130745,-1.20436545298, -0.155892367494,1.43767405578,-1.24003758301, -0.155892367494,1.47231680411,-1.27572572465, -0.155892367494,1.50695955245,-1.31143993245, -0.155892367494,1.54160230078,-1.34717466309, -0.155892367494,1.57624504911,-1.38292176339, -0.155892367494,1.61088779744,-1.41868513123, -0.155892367494,1.64553054577,-1.45446962968, -0.155892367494,1.68017329411,-1.49027507905, -0.155892367494,1.71481604244,-1.52609344942, -0.190535115827,-1.71481604244,1.5446258728, -0.190535115827,-1.68017329411,1.53222965368, -0.190535115827,-1.64553054577,1.51711908401, -0.190535115827,-1.61088779744,1.49980636485, -0.190535115827,-1.57624504911,1.48065657821, -0.190535115827,-1.54160230078,1.4600632513, -0.190535115827,-1.50695955245,1.43817492638, -0.190535115827,-1.47231680411,1.41517662524, -0.190535115827,-1.43767405578,1.39125875043, -0.190535115827,-1.40303130745,1.36645383855, -0.190535115827,-1.36838855912,1.34093964048, -0.190535115827,-1.33374581079,1.3236615984, -0.190535115827,-1.29910306245,1.31902182667, -0.190535115827,-1.26446031412,1.30945899899, -0.190535115827,-1.22981756579,1.2961060071, -0.190535115827,-1.19517481746,1.27973185965, -0.190535115827,-1.16053206913,1.26088571102, -0.190535115827,-1.12588932079,1.24002788085, -0.190535115827,-1.09124657246,1.21746836433, -0.190535115827,-1.05660382413,1.18884329425, -0.190535115827,-1.0219610758,1.15950025309, -0.190535115827,-0.987318327465,1.1298897432, -0.190535115827,-0.952675579133,1.10003911503, -0.190535115827,-0.918032830801,1.0699535457, -0.190535115827,-0.883390082469,1.03965502022, -0.190535115827,-0.848747334136,1.00914220984, -0.190535115827,-0.814104585804,0.978442779461, -0.190535115827,-0.779461837472,0.947555422287, -0.190535115827,-0.74481908914,0.916498786002, -0.190535115827,-0.710176340808,0.885266121784, -0.190535115827,-0.675533592476,0.853875328958, -0.190535115827,-0.640890844144,0.822338235105, -0.190535115827,-0.606248095812,0.790655744568, -0.190535115827,-0.57160534748,0.758829104208, -0.190535115827,-0.536962599148,0.726868780086, -0.190535115827,-0.502319850815,0.694773097596, -0.190535115827,-0.467677102483,0.662559469685, -0.190535115827,-0.433034354151,0.630212811743, -0.190535115827,-0.398391605819,0.597750012639, -0.190535115827,-0.363748857487,0.565176265689, -0.190535115827,-0.329106109155,0.532486624324, -0.190535115827,-0.294463360823,0.499689843594, -0.190535115827,-0.259820612491,0.466787226271, -0.190535115827,-0.225177864159,0.433778088655, -0.190535115827,-0.190535115827,0.40067121085, -0.190535115827,-0.155892367494,0.367455252975, -0.190535115827,-0.121249619162,0.334146114375, -0.190535115827,-0.0866068708302,0.30074994367, -0.190535115827,-0.0519641224981,0.267257287177, -0.190535115827,-0.017321374166,0.23366793229, -0.190535115827,0.017321374166,0.200163476059, -0.190535115827,0.0519641224981,0.167716558687, -0.190535115827,0.0866068708302,0.13466903478, -0.190535115827,0.121249619162,0.100536949983, -0.190535115827,0.155892367494,0.0663321098075, -0.190535115827,0.190535115827,0.0320645386938, -0.190535115827,0.225177864159,-0.00227770820104, -0.190535115827,0.259820612491,-0.03667791328, -0.190535115827,0.294463360823,-0.071151609395, -0.190535115827,0.329106109155,-0.10567513027, -0.190535115827,0.363748857487,-0.140252501579, -0.190535115827,0.398391605819,-0.174888281899, -0.190535115827,0.433034354151,-0.209579759147, -0.190535115827,0.467677102483,-0.244325008993, -0.190535115827,0.502319850815,-0.279115414958, -0.190535115827,0.536962599148,-0.313959957956, -0.190535115827,0.57160534748,-0.348845145321, -0.190535115827,0.606248095812,-0.383782299888, -0.190535115827,0.640890844144,-0.418760333485, -0.190535115827,0.675533592476,-0.453781301342, -0.190535115827,0.710176340808,-0.488844109003, -0.190535115827,0.74481908914,-0.523936255657, -0.190535115827,0.779461837472,-0.559074568469, -0.190535115827,0.814104585804,-0.594253628339, -0.190535115827,0.848747334136,-0.629462829177, -0.190535115827,0.883390082469,-0.664707861839, -0.190535115827,0.918032830801,-0.699986696197, -0.190535115827,0.952675579133,-0.735297762905, -0.190535115827,0.987318327465,-0.770639335568, -0.190535115827,1.0219610758,-0.806011018717, -0.190535115827,1.05660382413,-0.84141274625, -0.190535115827,1.09124657246,-0.876842924686, -0.190535115827,1.12588932079,-0.912303251631, -0.190535115827,1.16053206913,-0.947786216541, -0.190535115827,1.19517481746,-0.983294418861, -0.190535115827,1.22981756579,-1.01883457353, -0.190535115827,1.26446031412,-1.05440728087, -0.190535115827,1.29910306245,-1.08998375487, -0.190535115827,1.33374581079,-1.12559288565, -0.190535115827,1.36838855912,-1.16122443341, -0.190535115827,1.40303130745,-1.19687767144, -0.190535115827,1.43767405578,-1.23255060953, -0.190535115827,1.47231680411,-1.26824604598, -0.190535115827,1.50695955245,-1.3039569609, -0.190535115827,1.54160230078,-1.33969468255, -0.190535115827,1.57624504911,-1.37544831058, -0.190535115827,1.61088779744,-1.4112139257, -0.190535115827,1.64553054577,-1.44700476444, -0.190535115827,1.68017329411,-1.48281639645, -0.190535115827,1.71481604244,-1.51862443636, -0.225177864159,-1.71481604244,1.55134945176, -0.225177864159,-1.68017329411,1.53895299868, -0.225177864159,-1.64553054577,1.52380476409, -0.225177864159,-1.61088779744,1.50649799525, -0.225177864159,-1.57624504911,1.48739567444, -0.225177864159,-1.54160230078,1.4667610756, -0.225177864159,-1.50695955245,1.44487839471, -0.225177864159,-1.47231680411,1.42187387312, -0.225177864159,-1.43767405578,1.39791359765, -0.225177864159,-1.40303130745,1.37315543363, -0.225177864159,-1.36838855912,1.3476122111, -0.225177864159,-1.33374581079,1.330960316, -0.225177864159,-1.29910306245,1.3263247961, -0.225177864159,-1.26446031412,1.31675398485, -0.225177864159,-1.22981756579,1.30339502185, -0.225177864159,-1.19517481746,1.28701639106, -0.225177864159,-1.16053206913,1.26818185847, -0.225177864159,-1.12588932079,1.24732574833, -0.225177864159,-1.09124657246,1.22476574656, -0.225177864159,-1.05660382413,1.19585856339, -0.225177864159,-1.0219610758,1.16653209377, -0.225177864159,-0.987318327465,1.1369346991, -0.225177864159,-0.952675579133,1.10708581446, -0.225177864159,-0.918032830801,1.07701212805, -0.225177864159,-0.883390082469,1.04672265311, -0.225177864159,-0.848747334136,1.01622517697, -0.225177864159,-0.814104585804,0.985534895112, -0.225177864159,-0.779461837472,0.954654613716, -0.225177864159,-0.74481908914,0.923606464612, -0.225177864159,-0.710176340808,0.892387317396, -0.225177864159,-0.675533592476,0.861015804966, -0.225177864159,-0.640890844144,0.82948361562, -0.225177864159,-0.606248095812,0.797805133289, -0.225177864159,-0.57160534748,0.765993003195, -0.225177864159,-0.536962599148,0.734042009982, -0.225177864159,-0.502319850815,0.701956436237, -0.225177864159,-0.467677102483,0.669751638948, -0.225177864159,-0.433034354151,0.637418648611, -0.225177864159,-0.398391605819,0.60496278646, -0.225177864159,-0.363748857487,0.572400677107, -0.225177864159,-0.329106109155,0.539714680682, -0.225177864159,-0.294463360823,0.50693506402, -0.225177864159,-0.259820612491,0.474037122911, -0.225177864159,-0.225177864159,0.441036953424, -0.225177864159,-0.190535115827,0.407940991098, -0.225177864159,-0.155892367494,0.374743982714, -0.225177864159,-0.121249619162,0.341445589279, -0.225177864159,-0.0866068708302,0.308043968481, -0.225177864159,-0.0519641224981,0.274559406363, -0.225177864159,-0.017321374166,0.240976812147, -0.225177864159,0.017321374166,0.207458259326, -0.225177864159,0.0519641224981,0.175012445774, -0.225177864159,0.0866068708302,0.142039391875, -0.225177864159,0.121249619162,0.107905580449, -0.225177864159,0.155892367494,0.073705576466, -0.225177864159,0.190535115827,0.0394373355716, -0.225177864159,0.225177864159,0.00509970164603, -0.225177864159,0.259820612491,-0.0293033119282, -0.225177864159,0.294463360823,-0.0637608208944, -0.225177864159,0.329106109155,-0.098294046069, -0.225177864159,0.363748857487,-0.132871939671, -0.225177864159,0.398391605819,-0.167505584885, -0.225177864159,0.433034354151,-0.202195081716, -0.225177864159,0.467677102483,-0.236939013769, -0.225177864159,0.502319850815,-0.271734188408, -0.225177864159,0.536962599148,-0.306574072595, -0.225177864159,0.57160534748,-0.341459214651, -0.225177864159,0.606248095812,-0.376395765955, -0.225177864159,0.640890844144,-0.411372249881, -0.225177864159,0.675533592476,-0.446398018036, -0.225177864159,0.710176340808,-0.481461050198, -0.225177864159,0.74481908914,-0.516550469436, -0.225177864159,0.779461837472,-0.551694530282, -0.225177864159,0.814104585804,-0.586863526255, -0.225177864159,0.848747334136,-0.622081308722, -0.225177864159,0.883390082469,-0.657329400859, -0.225177864159,0.918032830801,-0.692608829898, -0.225177864159,0.952675579133,-0.727919109543, -0.225177864159,0.987318327465,-0.763265769332, -0.225177864159,1.0219610758,-0.798639228361, -0.225177864159,1.05660382413,-0.83404363435, -0.225177864159,1.09124657246,-0.869472769811, -0.225177864159,1.12588932079,-0.904938037242, -0.225177864159,1.16053206913,-0.940417558989, -0.225177864159,1.19517481746,-0.975933704021, -0.225177864159,1.22981756579,-1.01147967537, -0.225177864159,1.26446031412,-1.04703949221, -0.225177864159,1.29910306245,-1.08262575904, -0.225177864159,1.33374581079,-1.11823500363, -0.225177864159,1.36838855912,-1.15386970793, -0.225177864159,1.40303130745,-1.18952340081, -0.225177864159,1.43767405578,-1.22520151262, -0.225177864159,1.47231680411,-1.26089941682, -0.225177864159,1.50695955245,-1.29661216096, -0.225177864159,1.54160230078,-1.33234979764, -0.225177864159,1.57624504911,-1.36810159213, -0.225177864159,1.61088779744,-1.40387356923, -0.225177864159,1.64553054577,-1.43966902075, -0.225177864159,1.68017329411,-1.47547488485, -0.225177864159,1.71481604244,-1.51129761965, -0.259820612491,-1.71481604244,1.55789943003, -0.259820612491,-1.68017329411,1.54551040611, -0.259820612491,-1.64553054577,1.53040060879, -0.259820612491,-1.61088779744,1.51305190897, -0.259820612491,-1.57624504911,1.49395655055, -0.259820612491,-1.54160230078,1.47332302441, -0.259820612491,-1.50695955245,1.45143869413, -0.259820612491,-1.47231680411,1.42844580396, -0.259820612491,-1.43767405578,1.40448694265, -0.259820612491,-1.40303130745,1.37973297163, -0.259820612491,-1.36838855912,1.35418750573, -0.259820612491,-1.33374581079,1.33813024545, -0.259820612491,-1.29910306245,1.33348738254, -0.259820612491,-1.26446031412,1.32391462383, -0.259820612491,-1.22981756579,1.3105740917, -0.259820612491,-1.19517481746,1.29418609229, -0.259820612491,-1.16053206913,1.27535688886, -0.259820612491,-1.12588932079,1.25449576609, -0.259820612491,-1.09124657246,1.23180255839, -0.259820612491,-1.05660382413,1.20275819917, -0.259820612491,-1.0219610758,1.17343447013, -0.259820612491,-0.987318327465,1.14385155282, -0.259820612491,-0.952675579133,1.11401730822, -0.259820612491,-0.918032830801,1.08394984319, -0.259820612491,-0.883390082469,1.05367067823, -0.259820612491,-0.848747334136,1.02318051411, -0.259820612491,-0.814104585804,0.99250172703, -0.259820612491,-0.779461837472,0.961629104723, -0.259820612491,-0.74481908914,0.930587277159, -0.259820612491,-0.710176340808,0.899387616937, -0.259820612491,-0.675533592476,0.868012012268, -0.259820612491,-0.640890844144,0.836500994113, -0.259820612491,-0.606248095812,0.804834188259, -0.259820612491,-0.57160534748,0.773031745655, -0.259820612491,-0.536962599148,0.741086097272, -0.259820612491,-0.502319850815,0.70901439237, -0.259820612491,-0.467677102483,0.676816841057, -0.259820612491,-0.433034354151,0.644496013544, -0.259820612491,-0.398391605819,0.612052302215, -0.259820612491,-0.363748857487,0.579493489128, -0.259820612491,-0.329106109155,0.546824476065, -0.259820612491,-0.294463360823,0.514043378494, -0.259820612491,-0.259820612491,0.481160211177, -0.259820612491,-0.225177864159,0.448179041657, -0.259820612491,-0.190535115827,0.415077554207, -0.259820612491,-0.155892367494,0.381888265018, -0.259820612491,-0.121249619162,0.348600976711, -0.259820612491,-0.0866068708302,0.315209596133, -0.259820612491,-0.0519641224981,0.28172959817, -0.259820612491,-0.017321374166,0.248160271937, -0.259820612491,0.017321374166,0.214623474299, -0.259820612491,0.0519641224981,0.182175268069, -0.259820612491,0.0866068708302,0.149273254996, -0.259820612491,0.121249619162,0.115142882167, -0.259820612491,0.155892367494,0.0809433772863, -0.259820612491,0.190535115827,0.0466809817235, -0.259820612491,0.225177864159,0.0123427748322, -0.259820612491,0.259820612491,-0.0220511620679, -0.259820612491,0.294463360823,-0.056522221907, -0.259820612491,0.329106109155,-0.091044470577, -0.259820612491,0.363748857487,-0.125623715029, -0.259820612491,0.398391605819,-0.160251958156, -0.259820612491,0.433034354151,-0.194941956086, -0.259820612491,0.467677102483,-0.229686057076, -0.259820612491,0.502319850815,-0.264477000265, -0.259820612491,0.536962599148,-0.29931842124, -0.259820612491,0.57160534748,-0.334205725155, -0.259820612491,0.606248095812,-0.369142981887, -0.259820612491,0.640890844144,-0.404124239524, -0.259820612491,0.675533592476,-0.439140798491, -0.259820612491,0.710176340808,-0.474200002035, -0.259820612491,0.74481908914,-0.509298619479, -0.259820612491,0.779461837472,-0.544439191307, -0.259820612491,0.814104585804,-0.579626669455, -0.259820612491,0.848747334136,-0.614834322476, -0.259820612491,0.883390082469,-0.65008170173, -0.259820612491,0.918032830801,-0.685364244309, -0.259820612491,0.952675579133,-0.720674814735, -0.259820612491,0.987318327465,-0.756023665117, -0.259820612491,1.0219610758,-0.791399772654, -0.259820612491,1.05660382413,-0.826800623071, -0.259820612491,1.09124657246,-0.862239338421, -0.259820612491,1.12588932079,-0.897694458875, -0.259820612491,1.16053206913,-0.933185326249, -0.259820612491,1.19517481746,-0.968697621686, -0.259820612491,1.22981756579,-1.00423791065, -0.259820612491,1.26446031412,-1.03980965916, -0.259820612491,1.29910306245,-1.07539834012, -0.259820612491,1.33374581079,-1.11101016739, -0.259820612491,1.36838855912,-1.14664716873, -0.259820612491,1.40303130745,-1.18230151455, -0.259820612491,1.43767405578,-1.21798109238, -0.259820612491,1.47231680411,-1.25368127098, -0.259820612491,1.50695955245,-1.28940043537, -0.259820612491,1.54160230078,-1.32513522811, -0.259820612491,1.57624504911,-1.36089445062, -0.259820612491,1.61088779744,-1.39666970629, -0.259820612491,1.64553054577,-1.43247014232, -0.259820612491,1.68017329411,-1.46827606193, -0.259820612491,1.71481604244,-1.5041074557, -0.294463360823,-1.71481604244,1.56438984933, -0.294463360823,-1.68017329411,1.55200246372, -0.294463360823,-1.64553054577,1.53685628893, -0.294463360823,-1.61088779744,1.51953099819, -0.294463360823,-1.57624504911,1.50043013154, -0.294463360823,-1.54160230078,1.4798033923, -0.294463360823,-1.50695955245,1.45792397994, -0.294463360823,-1.47231680411,1.43493186637, -0.294463360823,-1.43767405578,1.41097975602, -0.294463360823,-1.40303130745,1.38618042116, -0.294463360823,-1.36838855912,1.36068036192, -0.294463360823,-1.33374581079,1.34517584427, -0.294463360823,-1.29910306245,1.34052892758, -0.294463360823,-1.26446031412,1.330960316, -0.294463360823,-1.22981756579,1.31761507301, -0.294463360823,-1.19517481746,1.30124401617, -0.294463360823,-1.16053206913,1.28239622392, -0.294463360823,-1.12588932079,1.26153420398, -0.294463360823,-1.09124657246,1.23856933398, -0.294463360823,-1.05660382413,1.20954321469, -0.294463360823,-1.0219610758,1.18022443474, -0.294463360823,-0.987318327465,1.15064861195, -0.294463360823,-0.952675579133,1.12082092801, -0.294463360823,-0.918032830801,1.09076606697, -0.294463360823,-0.883390082469,1.06049757485, -0.294463360823,-0.848747334136,1.03001926439, -0.294463360823,-0.814104585804,0.999347731907, -0.294463360823,-0.779461837472,0.968491867554, -0.294463360823,-0.74481908914,0.937455818113, -0.294463360823,-0.710176340808,0.906259320974, -0.294463360823,-0.675533592476,0.874897471219, -0.294463360823,-0.640890844144,0.843395011491, -0.294463360823,-0.606248095812,0.811739333741, -0.294463360823,-0.57160534748,0.779945304138, -0.294463360823,-0.536962599148,0.748013392135, -0.294463360823,-0.502319850815,0.715954262604, -0.294463360823,-0.467677102483,0.683759534278, -0.294463360823,-0.433034354151,0.651449493613, -0.294463360823,-0.398391605819,0.619012983327, -0.294463360823,-0.363748857487,0.586465224011, -0.294463360823,-0.329106109155,0.553806248067, -0.294463360823,-0.294463360823,0.521043568416, -0.294463360823,-0.259820612491,0.48816083302, -0.294463360823,-0.225177864159,0.455186066181, -0.294463360823,-0.190535115827,0.422098569752, -0.294463360823,-0.155892367494,0.388909143606, -0.294463360823,-0.121249619162,0.355635936706, -0.294463360823,-0.0866068708302,0.322251252492, -0.294463360823,-0.0519641224981,0.288777541486, -0.294463360823,-0.017321374166,0.255216616592, -0.294463360823,0.017321374166,0.22166366541, -0.294463360823,0.0519641224981,0.18921794201, -0.294463360823,0.0866068708302,0.156385173222, -0.294463360823,0.121249619162,0.122259024763, -0.294463360823,0.155892367494,0.0880637470687, -0.294463360823,0.190535115827,0.0537998374341, -0.294463360823,0.225177864159,0.0194656582781, -0.294463360823,0.259820612491,-0.0149287704579, -0.294463360823,0.294463360823,-0.0493900921277, -0.294463360823,0.329106109155,-0.0839063988975, -0.294463360823,0.363748857487,-0.118497666845, -0.294463360823,0.398391605819,-0.153127405651, -0.294463360823,0.433034354151,-0.187815795176, -0.294463360823,0.467677102483,-0.222558345719, -0.294463360823,0.502319850815,-0.257350914488, -0.294463360823,0.536962599148,-0.292192861705, -0.294463360823,0.57160534748,-0.327085114612, -0.294463360823,0.606248095812,-0.362019136266, -0.294463360823,0.640890844144,-0.396996397471, -0.294463360823,0.675533592476,-0.43201420367, -0.294463360823,0.710176340808,-0.467077767072, -0.294463360823,0.74481908914,-0.502175873719, -0.294463360823,0.779461837472,-0.537319091489, -0.294463360823,0.814104585804,-0.572501916193, -0.294463360823,0.848747334136,-0.607712886059, -0.294463360823,0.883390082469,-0.642962676787, -0.294463360823,0.918032830801,-0.678245270298, -0.294463360823,0.952675579133,-0.71355998995, -0.294463360823,0.987318327465,-0.74890432894, -0.294463360823,1.0219610758,-0.784283083288, -0.294463360823,1.05660382413,-0.8196912752, -0.294463360823,1.09124657246,-0.855123649733, -0.294463360823,1.12588932079,-0.890585395454, -0.294463360823,1.16053206913,-0.926074584497, -0.294463360823,1.19517481746,-0.96159394902, -0.294463360823,1.22981756579,-0.997134407748, -0.294463360823,1.26446031412,-1.0327125025, -0.294463360823,1.29910306245,-1.06828904684, -0.294463360823,1.33374581079,-1.10391122783, -0.294463360823,1.36838855912,-1.13954929641, -0.294463360823,1.40303130745,-1.17520728456, -0.294463360823,1.43767405578,-1.21088899236, -0.294463360823,1.47231680411,-1.24658726894, -0.294463360823,1.50695955245,-1.28231128096, -0.294463360823,1.54160230078,-1.31805322561, -0.294463360823,1.57624504911,-1.35381331213, -0.294463360823,1.61088779744,-1.38958750781, -0.294463360823,1.64553054577,-1.42539138948, -0.294463360823,1.68017329411,-1.46120037443, -0.294463360823,1.71481604244,-1.49703232986, -0.329106109155,-1.71481604244,1.5707361802, -0.329106109155,-1.68017329411,1.55834925804, -0.329106109155,-1.64553054577,1.54320355247, -0.329106109155,-1.61088779744,1.52590284063, -0.329106109155,-1.57624504911,1.506763777, -0.329106109155,-1.54160230078,1.48615655549, -0.329106109155,-1.50695955245,1.46428269132, -0.329106109155,-1.47231680411,1.44129190741, -0.329106109155,-1.43767405578,1.41733677694, -0.329106109155,-1.40303130745,1.39254581923, -0.329106109155,-1.36838855912,1.36704389123, -0.329106109155,-1.33374581079,1.35208839853, -0.329106109155,-1.29910306245,1.34745334315, -0.329106109155,-1.26446031412,1.33789436255, -0.329106109155,-1.22981756579,1.32453839509, -0.329106109155,-1.19517481746,1.30816097666, -0.329106109155,-1.16053206913,1.28932287169, -0.329106109155,-1.12588932079,1.26847535218, -0.329106109155,-1.09124657246,1.24523160187, -0.329106109155,-1.05660382413,1.21620467935, -0.329106109155,-1.0219610758,1.18690256492, -0.329106109155,-0.987318327465,1.15733345489, -0.329106109155,-0.952675579133,1.12751338934, -0.329106109155,-0.918032830801,1.0974696725, -0.329106109155,-0.883390082469,1.06720762018, -0.329106109155,-0.848747334136,1.03673911792, -0.329106109155,-0.814104585804,1.0060771279, -0.329106109155,-0.779461837472,0.975229606604, -0.329106109155,-0.74481908914,0.944205765464, -0.329106109155,-0.710176340808,0.913018644929, -0.329106109155,-0.675533592476,0.881675360404, -0.329106109155,-0.640890844144,0.850170054624, -0.329106109155,-0.606248095812,0.818524992084, -0.329106109155,-0.57160534748,0.786744523546, -0.329106109155,-0.536962599148,0.754822662425, -0.329106109155,-0.502319850815,0.7227654224, -0.329106109155,-0.467677102483,0.690587324327, -0.329106109155,-0.433034354151,0.658287395071, -0.329106109155,-0.398391605819,0.625863600765, -0.329106109155,-0.363748857487,0.593319918034, -0.329106109155,-0.329106109155,0.560671114172, -0.329106109155,-0.294463360823,0.527915724141, -0.329106109155,-0.259820612491,0.495043112028, -0.329106109155,-0.225177864159,0.462073815425, -0.329106109155,-0.190535115827,0.428995160176, -0.329106109155,-0.155892367494,0.395825267345, -0.329106109155,-0.121249619162,0.362537284548, -0.329106109155,-0.0866068708302,0.329163090195, -0.329106109155,-0.0519641224981,0.295707256527, -0.329106109155,-0.017321374166,0.262150334137, -0.329106109155,0.017321374166,0.228583141046, -0.329106109155,0.0519641224981,0.196136542296, -0.329106109155,0.0866068708302,0.163328936236, -0.329106109155,0.121249619162,0.129247023213, -0.329106109155,0.155892367494,0.0950573412139, -0.329106109155,0.190535115827,0.0607904993546, -0.329106109155,0.225177864159,0.0264630881676, -0.329106109155,0.259820612491,-0.00793149880798, -0.329106109155,0.294463360823,-0.0423998238887, -0.329106109155,0.329106109155,-0.0769068317502, -0.329106109155,0.363748857487,-0.111489921995, -0.329106109155,0.398391605819,-0.146125266086, -0.329106109155,0.433034354151,-0.180814732914, -0.329106109155,0.467677102483,-0.215554653127, -0.329106109155,0.502319850815,-0.250347661451, -0.329106109155,0.536962599148,-0.285188567808, -0.329106109155,0.57160534748,-0.320077605897, -0.329106109155,0.606248095812,-0.3550138051, -0.329106109155,0.640890844144,-0.389992030242, -0.329106109155,0.675533592476,-0.425013515809, -0.329106109155,0.710176340808,-0.460078944753, -0.329106109155,0.74481908914,-0.495177659913, -0.329106109155,0.779461837472,-0.530315103926, -0.329106109155,0.814104585804,-0.56550297543, -0.329106109155,0.848747334136,-0.600716724726, -0.329106109155,0.883390082469,-0.635965443733, -0.329106109155,0.918032830801,-0.671247678334, -0.329106109155,0.952675579133,-0.706563364641, -0.329106109155,0.987318327465,-0.741911730206, -0.329106109155,1.0219610758,-0.777289922444, -0.329106109155,1.05660382413,-0.812699318861, -0.329106109155,1.09124657246,-0.848135618204, -0.329106109155,1.12588932079,-0.883597751612, -0.329106109155,1.16053206913,-0.919090982598, -0.329106109155,1.19517481746,-0.954606453893, -0.329106109155,1.22981756579,-0.990150185556, -0.329106109155,1.26446031412,-1.02572700583, -0.329106109155,1.29910306245,-1.0613249737, -0.329106109155,1.33374581079,-1.09693389158, -0.329106109155,1.36838855912,-1.13257191836, -0.329106109155,1.40303130745,-1.16823299389, -0.329106109155,1.43767405578,-1.20391680232, -0.329106109155,1.47231680411,-1.23961789054, -0.329106109155,1.50695955245,-1.27534071845, -0.329106109155,1.54160230078,-1.31108569459, -0.329106109155,1.57624504911,-1.34684602306, -0.329106109155,1.61088779744,-1.38263239975, -0.329106109155,1.64553054577,-1.41842900764, -0.329106109155,1.68017329411,-1.45424376298, -0.329106109155,1.71481604244,-1.49008483254, -0.363748857487,-1.71481604244,1.57696675451, -0.363748857487,-1.68017329411,1.56458057092, -0.363748857487,-1.64553054577,1.54948041296, -0.363748857487,-1.61088779744,1.5321337984, -0.363748857487,-1.57624504911,1.51304605669, -0.363748857487,-1.54160230078,1.49242037225, -0.363748857487,-1.50695955245,1.47052022627, -0.363748857487,-1.47231680411,1.44753127395, -0.363748857487,-1.43767405578,1.42358243033, -0.363748857487,-1.40303130745,1.39878943142, -0.363748857487,-1.36838855912,1.37329539351, -0.363748857487,-1.33374581079,1.35889824319, -0.363748857487,-1.29910306245,1.35426436031, -0.363748857487,-1.26446031412,1.34469309356, -0.363748857487,-1.22981756579,1.33134784244, -0.363748857487,-1.19517481746,1.31497412927, -0.363748857487,-1.16053206913,1.29614012661, -0.363748857487,-1.12588932079,1.27528127625, -0.363748857487,-1.09124657246,1.25177533949, -0.363748857487,-1.05660382413,1.22276449177, -0.363748857487,-1.0219610758,1.19346116348, -0.363748857487,-0.987318327465,1.16390645716, -0.363748857487,-0.952675579133,1.13409443746, -0.363748857487,-0.918032830801,1.10405991967, -0.363748857487,-0.883390082469,1.07380486324, -0.363748857487,-0.848747334136,1.04335023733, -0.363748857487,-0.814104585804,1.01269391163, -0.363748857487,-0.779461837472,0.981855142005, -0.363748857487,-0.74481908914,0.950841272844, -0.363748857487,-0.710176340808,0.919669136627, -0.363748857487,-0.675533592476,0.888335990917, -0.363748857487,-0.640890844144,0.856845165318, -0.363748857487,-0.606248095812,0.825195347267, -0.363748857487,-0.57160534748,0.793431038296, -0.363748857487,-0.536962599148,0.761515532416, -0.363748857487,-0.502319850815,0.729472436516, -0.363748857487,-0.467677102483,0.697303888714, -0.363748857487,-0.433034354151,0.66500960852, -0.363748857487,-0.398391605819,0.632593827601, -0.363748857487,-0.363748857487,0.600066693637, -0.363748857487,-0.329106109155,0.56742288372, -0.363748857487,-0.294463360823,0.534672013336, -0.363748857487,-0.259820612491,0.501810967761, -0.363748857487,-0.225177864159,0.468846290275, -0.363748857487,-0.190535115827,0.435783691094, -0.363748857487,-0.155892367494,0.402611197778, -0.363748857487,-0.121249619162,0.369343364407, -0.363748857487,-0.0866068708302,0.335981192284, -0.363748857487,-0.0519641224981,0.302522572376, -0.363748857487,-0.017321374166,0.268968380462, -0.363748857487,0.017321374166,0.235389181455, -0.363748857487,0.0519641224981,0.202939231425, -0.363748857487,0.0866068708302,0.170130840619, -0.363748857487,0.121249619162,0.136121996259, -0.363748857487,0.155892367494,0.101928718971, -0.363748857487,0.190535115827,0.0676649704521, -0.363748857487,0.225177864159,0.0333394873849, -0.363748857487,0.259820612491,-0.00105495678772, -0.363748857487,0.294463360823,-0.0355089412429, -0.363748857487,0.329106109155,-0.0700256698775, -0.363748857487,0.363748857487,-0.104613851142, -0.363748857487,0.398391605819,-0.13923129787, -0.363748857487,0.433034354151,-0.173929581116, -0.363748857487,0.467677102483,-0.208670708116, -0.363748857487,0.502319850815,-0.243463085996, -0.363748857487,0.536962599148,-0.278305561514, -0.363748857487,0.57160534748,-0.313194337476, -0.363748857487,0.606248095812,-0.348128936123, -0.363748857487,0.640890844144,-0.383106921352, -0.363748857487,0.675533592476,-0.418134272823, -0.363748857487,0.710176340808,-0.453189788473, -0.363748857487,0.74481908914,-0.488299647152, -0.363748857487,0.779461837472,-0.523437207176, -0.363748857487,0.814104585804,-0.558625391477, -0.363748857487,0.848747334136,-0.593833805651, -0.363748857487,0.883390082469,-0.629085939561, -0.363748857487,0.918032830801,-0.664370145807, -0.363748857487,0.952675579133,-0.699687654285, -0.363748857487,0.987318327465,-0.735037486614, -0.363748857487,1.0219610758,-0.770416049411, -0.363748857487,1.05660382413,-0.805826537948, -0.363748857487,1.09124657246,-0.841264129525, -0.363748857487,1.12588932079,-0.876727484549, -0.363748857487,1.16053206913,-0.912220743239, -0.363748857487,1.19517481746,-0.947742528714, -0.363748857487,1.22981756579,-0.983294418861, -0.363748857487,1.26446031412,-1.01886559008, -0.363748857487,1.29910306245,-1.0544627315, -0.363748857487,1.33374581079,-1.09007408028, -0.363748857487,1.36838855912,-1.12571369208, -0.363748857487,1.40303130745,-1.16137785439, -0.363748857487,1.43767405578,-1.19706060118, -0.363748857487,1.47231680411,-1.23276874796, -0.363748857487,1.50695955245,-1.2684955778, -0.363748857487,1.54160230078,-1.30423557522, -0.363748857487,1.57624504911,-1.34000436515, -0.363748857487,1.61088779744,-1.37579071124, -0.363748857487,1.64553054577,-1.41159016482, -0.363748857487,1.68017329411,-1.44740236151, -0.363748857487,1.71481604244,-1.48324492511, -0.398391605819,-1.71481604244,1.58312343005, -0.398391605819,-1.68017329411,1.57074058328, -0.398391605819,-1.64553054577,1.55563994099, -0.398391605819,-1.61088779744,1.53829784244, -0.398391605819,-1.57624504911,1.51920765626, -0.398391605819,-1.54160230078,1.49858447242, -0.398391605819,-1.50695955245,1.47666964145, -0.398391605819,-1.47231680411,1.45368633896, -0.398391605819,-1.43767405578,1.42971205958, -0.398391605819,-1.40303130745,1.40496622238, -0.398391605819,-1.36838855912,1.37942777907, -0.398391605819,-1.33374581079,1.36559580601, -0.398391605819,-1.29910306245,1.36095314905, -0.398391605819,-1.26446031412,1.35138816882, -0.398391605819,-1.22981756579,1.33804702399, -0.398391605819,-1.19517481746,1.32167107184, -0.398391605819,-1.16053206913,1.30283465107, -0.398391605819,-1.12588932079,1.28197592998, -0.398391605819,-1.09124657246,1.25821527342, -0.398391605819,-1.05660382413,1.22921127426, -0.398391605819,-1.0219610758,1.19992119728, -0.398391605819,-0.987318327465,1.17037140194, -0.398391605819,-0.952675579133,1.14057147836, -0.398391605819,-0.918032830801,1.11054070749, -0.398391605819,-0.883390082469,1.08029808728, -0.398391605819,-0.848747334136,1.04984456514, -0.398391605819,-0.814104585804,1.01920855903, -0.398391605819,-0.779461837472,0.988372213184, -0.398391605819,-0.74481908914,0.957375343051, -0.398391605819,-0.710176340808,0.926203605981, -0.398391605819,-0.675533592476,0.894883523596, -0.398391605819,-0.640890844144,0.863394022281, -0.398391605819,-0.606248095812,0.83177121269, -0.398391605819,-0.57160534748,0.800004600498, -0.398391605819,-0.536962599148,0.768098341098, -0.398391605819,-0.502319850815,0.736067352622, -0.398391605819,-0.467677102483,0.703906402856, -0.398391605819,-0.433034354151,0.671623766577, -0.398391605819,-0.398391605819,0.639212373399, -0.398391605819,-0.363748857487,0.606693355386, -0.398391605819,-0.329106109155,0.574065184848, -0.398391605819,-0.294463360823,0.541316320462, -0.398391605819,-0.259820612491,0.50846812895, -0.398391605819,-0.225177864159,0.475507293244, -0.398391605819,-0.190535115827,0.442455755399, -0.398391605819,-0.155892367494,0.40928567967, -0.398391605819,-0.121249619162,0.376024108206, -0.398391605819,-0.0866068708302,0.342671497686, -0.398391605819,-0.0519641224981,0.30922048595, -0.398391605819,-0.017321374166,0.275674522776, -0.398391605819,0.017321374166,0.242079182868, -0.398391605819,0.0519641224981,0.209633448541, -0.398391605819,0.0866068708302,0.176822753005, -0.398391605819,0.121249619162,0.142877287057, -0.398391605819,0.155892367494,0.108688154794, -0.398391605819,0.190535115827,0.0744340348213, -0.398391605819,0.225177864159,0.0401074074925, -0.398391605819,0.259820612491,0.00571492369962, -0.398391605819,0.294463360823,-0.028750604772, -0.398391605819,0.329106109155,-0.0632589858288, -0.398391605819,0.363748857487,-0.0978312099248, -0.398391605819,0.398391605819,-0.132479801066, -0.398391605819,0.433034354151,-0.167158984769, -0.398391605819,0.467677102483,-0.201899699219, -0.398391605819,0.502319850815,-0.236693239927, -0.398391605819,0.536962599148,-0.271535750193, -0.398391605819,0.57160534748,-0.306421581637, -0.398391605819,0.606248095812,-0.341360408746, -0.398391605819,0.640890844144,-0.376337067223, -0.398391605819,0.675533592476,-0.411364498855, -0.398391605819,0.710176340808,-0.446425658306, -0.398391605819,0.74481908914,-0.481526773117, -0.398391605819,0.779461837472,-0.51666769533, -0.398391605819,0.814104585804,-0.551849447162, -0.398391605819,0.848747334136,-0.587066235405, -0.398391605819,0.883390082469,-0.622322493445, -0.398391605819,0.918032830801,-0.657608579211, -0.398391605819,0.952675579133,-0.69292557189, -0.398391605819,0.987318327465,-0.728277664183, -0.398391605819,1.0219610758,-0.763657439389, -0.398391605819,1.05660382413,-0.79906891675, -0.398391605819,1.09124657246,-0.834505420429, -0.398391605819,1.12588932079,-0.869978190132, -0.398391605819,1.16053206913,-0.905469273885, -0.398391605819,1.19517481746,-0.940997718902, -0.398391605819,1.22981756579,-0.976536992945, -0.398391605819,1.26446031412,-1.01210874572, -0.398391605819,1.29910306245,-1.04771784271, -0.398391605819,1.33374581079,-1.08332791647, -0.398391605819,1.36838855912,-1.11897058051, -0.398391605819,1.40303130745,-1.15463782407, -0.398391605819,1.43767405578,-1.19032387944, -0.398391605819,1.47231680411,-1.22603137634, -0.398391605819,1.50695955245,-1.26175577993, -0.398391605819,1.54160230078,-1.29750511464, -0.398391605819,1.57624504911,-1.33326902617, -0.398391605819,1.61088779744,-1.36905893058, -0.398391605819,1.64553054577,-1.40485996187, -0.398391605819,1.68017329411,-1.44068490498, -0.398391605819,1.71481604244,-1.47652447484, -0.433034354151,-1.71481604244,1.58916701446, -0.433034354151,-1.68017329411,1.57678734024, -0.433034354151,-1.64553054577,1.56169152896, -0.433034354151,-1.61088779744,1.54435023012, -0.433034354151,-1.57624504911,1.52521507724, -0.433034354151,-1.54160230078,1.50459719875, -0.433034354151,-1.50695955245,1.48272639813, -0.433034354151,-1.47231680411,1.45974379599, -0.433034354151,-1.43767405578,1.43579891156, -0.433034354151,-1.40303130745,1.41097975602, -0.433034354151,-1.36838855912,1.38548993817, -0.433034354151,-1.33374581079,1.37217299994, -0.433034354151,-1.29910306245,1.36753629267, -0.433034354151,-1.26446031412,1.35798241515, -0.433034354151,-1.22981756579,1.34462595385, -0.433034354151,-1.19517481746,1.32825581263, -0.433034354151,-1.16053206913,1.30941107198, -0.433034354151,-1.12588932079,1.28856285914, -0.433034354151,-1.09124657246,1.26454666831, -0.433034354151,-1.05660382413,1.23555599456, -0.433034354151,-1.0219610758,1.20627476927, -0.433034354151,-0.987318327465,1.17673187927, -0.433034354151,-0.952675579133,1.14694415431, -0.433034354151,-0.918032830801,1.11691986054, -0.433034354151,-0.883390082469,1.08668567947, -0.433034354151,-0.848747334136,1.05624315799, -0.433034354151,-0.814104585804,1.0256046129, -0.433034354151,-0.779461837472,0.994784372876, -0.433034354151,-0.74481908914,0.963802070538, -0.433034354151,-0.710176340808,0.932636523145, -0.433034354151,-0.675533592476,0.901321894497, -0.433034354151,-0.640890844144,0.869849706488, -0.433034354151,-0.606248095812,0.838238438173, -0.433034354151,-0.57160534748,0.806463368669, -0.433034354151,-0.536962599148,0.774579160421, -0.433034354151,-0.502319850815,0.742551329358, -0.433034354151,-0.467677102483,0.710401878291, -0.433034354151,-0.433034354151,0.678126048943, -0.433034354151,-0.398391605819,0.645727157225, -0.433034354151,-0.363748857487,0.61321923471, -0.433034354151,-0.329106109155,0.580589844138, -0.433034354151,-0.294463360823,0.547859170875, -0.433034354151,-0.259820612491,0.515018145636, -0.433034354151,-0.225177864159,0.482069896279, -0.433034354151,-0.190535115827,0.449015422692, -0.433034354151,-0.155892367494,0.41586541299, -0.433034354151,-0.121249619162,0.382615291891, -0.433034354151,-0.0866068708302,0.349257319996, -0.433034354151,-0.0519641224981,0.315813703312, -0.433034354151,-0.017321374166,0.282272348586, -0.433034354151,0.017321374166,0.248666116341, -0.433034354151,0.0519641224981,0.216218967951, -0.433034354151,0.0866068708302,0.183408102931, -0.433034354151,0.121249619162,0.149526894139, -0.433034354151,0.155892367494,0.115339154622, -0.433034354151,0.190535115827,0.0810800646564, -0.433034354151,0.225177864159,0.0467619186943, -0.433034354151,0.259820612491,0.0123619524348, -0.433034354151,0.294463360823,-0.0220852509859, -0.433034354151,0.329106109155,-0.0566030438066, -0.433034354151,0.363748857487,-0.0911722507626, -0.433034354151,0.398391605819,-0.125813170475, -0.433034354151,0.433034354151,-0.160499206923, -0.433034354151,0.467677102483,-0.195240713971, -0.433034354151,0.502319850815,-0.230031199346, -0.433034354151,0.536962599148,-0.264875525334, -0.433034354151,0.57160534748,-0.299764930268, -0.433034354151,0.606248095812,-0.334699001892, -0.433034354151,0.640890844144,-0.369678663052, -0.433034354151,0.675533592476,-0.404700940525, -0.433034354151,0.710176340808,-0.439763976334, -0.433034354151,0.74481908914,-0.474877405723, -0.433034354151,0.779461837472,-0.510016025893, -0.433034354151,0.814104585804,-0.545202639759, -0.433034354151,0.848747334136,-0.580410196596, -0.433034354151,0.883390082469,-0.615669090839, -0.433034354151,0.918032830801,-0.650956566216, -0.433034354151,0.952675579133,-0.686276462717, -0.433034354151,0.987318327465,-0.72162494127, -0.433034354151,1.0219610758,-0.757010268999, -0.433034354151,1.05660382413,-0.79242264016, -0.433034354151,1.09124657246,-0.827861950055, -0.433034354151,1.12588932079,-0.863331083268, -0.433034354151,1.16053206913,-0.898832406454, -0.433034354151,1.19517481746,-0.934347367192, -0.433034354151,1.22981756579,-0.969900055203, -0.433034354151,1.26446031412,-1.00546818121, -0.433034354151,1.29910306245,-1.04106895872, -0.433034354151,1.33374581079,-1.07669377354, -0.433034354151,1.36838855912,-1.11233875003, -0.433034354151,1.40303130745,-1.14800613269, -0.433034354151,1.43767405578,-1.18369188918, -0.433034354151,1.47231680411,-1.2194022504, -0.433034354151,1.50695955245,-1.25513333401, -0.433034354151,1.54160230078,-1.29088409594, -0.433034354151,1.57624504911,-1.32665114875, -0.433034354151,1.61088779744,-1.36243370019, -0.433034354151,1.64553054577,-1.39824523288, -0.433034354151,1.68017329411,-1.43406264125, -0.433034354151,1.71481604244,-1.46990485605, -0.467677102483,-1.71481604244,1.59514889516, -0.467677102483,-1.68017329411,1.58277103933, -0.467677102483,-1.64553054577,1.56763479503, -0.467677102483,-1.61088779744,1.55029536812, -0.467677102483,-1.57624504911,1.53121020451, -0.467677102483,-1.54160230078,1.51059081435, -0.467677102483,-1.50695955245,1.48867347109, -0.467677102483,-1.47231680411,1.46569205854, -0.467677102483,-1.43767405578,1.44174994207, -0.467677102483,-1.40303130745,1.41696111292, -0.467677102483,-1.36838855912,1.39140808613, -0.467677102483,-1.33374581079,1.37865710437, -0.467677102483,-1.29910306245,1.37401698445, -0.467677102483,-1.26446031412,1.36446638296, -0.467677102483,-1.22981756579,1.35111520283, -0.467677102483,-1.19517481746,1.3347321512, -0.467677102483,-1.16053206913,1.31590469865, -0.467677102483,-1.12588932079,1.29504544427, -0.467677102483,-1.09124657246,1.27078880258, -0.467677102483,-1.05660382413,1.24179517815, -0.467677102483,-1.0219610758,1.21252805441, -0.467677102483,-0.987318327465,1.18299129921, -0.467677102483,-0.952675579133,1.15321239733, -0.467677102483,-0.918032830801,1.12320451081, -0.467677102483,-0.883390082469,1.09296647106, -0.467677102483,-0.848747334136,1.06253778679, -0.467677102483,-0.814104585804,1.03191810735, -0.467677102483,-0.779461837472,1.00110230931, -0.467677102483,-0.74481908914,0.970116517295, -0.467677102483,-0.710176340808,0.938970932131, -0.467677102483,-0.675533592476,0.907666420169, -0.467677102483,-0.640890844144,0.876200931108, -0.467677102483,-0.606248095812,0.844584846306, -0.467677102483,-0.57160534748,0.812833756322, -0.467677102483,-0.536962599148,0.780954508272, -0.467677102483,-0.502319850815,0.748940870007, -0.467677102483,-0.467677102483,0.716793768226, -0.467677102483,-0.433034354151,0.684530792638, -0.467677102483,-0.398391605819,0.652141302953, -0.467677102483,-0.363748857487,0.619637570356, -0.467677102483,-0.329106109155,0.587018152055, -0.467677102483,-0.294463360823,0.554296811818, -0.467677102483,-0.259820612491,0.521464400368, -0.467677102483,-0.225177864159,0.488518337144, -0.467677102483,-0.190535115827,0.455477326931, -0.467677102483,-0.155892367494,0.422327198082, -0.467677102483,-0.121249619162,0.389073735862, -0.467677102483,-0.0866068708302,0.355741740432, -0.467677102483,-0.0519641224981,0.322296997692, -0.467677102483,-0.017321374166,0.288765276855, -0.467677102483,0.017321374166,0.255144243823, -0.467677102483,0.0519641224981,0.222695864795, -0.467677102483,0.0866068708302,0.189886170689, -0.467677102483,0.121249619162,0.156069189798, -0.467677102483,0.155892367494,0.121885066291, -0.467677102483,0.190535115827,0.0876276289437, -0.467677102483,0.225177864159,0.0533068296928, -0.467677102483,0.259820612491,0.0189186856793, -0.467677102483,0.294463360823,-0.0155330100834, -0.467677102483,0.329106109155,-0.0500542874318, -0.467677102483,0.363748857487,-0.0846322075505, -0.467677102483,0.398391605819,-0.119266998198, -0.467677102483,0.433034354151,-0.15394668995, -0.467677102483,0.467677102483,-0.188687495857, -0.467677102483,0.502319850815,-0.223479829667, -0.467677102483,0.536962599148,-0.258321445642, -0.467677102483,0.57160534748,-0.293211669135, -0.467677102483,0.606248095812,-0.328146649177, -0.467677102483,0.640890844144,-0.363128089834, -0.467677102483,0.675533592476,-0.398155001783, -0.467677102483,0.710176340808,-0.433219238988, -0.467677102483,0.74481908914,-0.468326251042, -0.467677102483,0.779461837472,-0.503465762327, -0.467677102483,0.814104585804,-0.53865063162, -0.467677102483,0.848747334136,-0.573862058943, -0.467677102483,0.883390082469,-0.609122236944, -0.467677102483,0.918032830801,-0.6444106558, -0.467677102483,0.952675579133,-0.679730726808, -0.467677102483,0.987318327465,-0.71508303116, -0.467677102483,1.0219610758,-0.75046677537, -0.467677102483,1.05660382413,-0.785879165133, -0.467677102483,1.09124657246,-0.821323867468, -0.467677102483,1.12588932079,-0.856797341957, -0.467677102483,1.16053206913,-0.892289578312, -0.467677102483,1.19517481746,-0.92781912876, -0.467677102483,1.22981756579,-0.963367312327, -0.467677102483,1.26446031412,-0.998939798187, -0.467677102483,1.29910306245,-1.03454740373, -0.467677102483,1.33374581079,-1.07015795487, -0.467677102483,1.36838855912,-1.10581217548, -0.467677102483,1.40303130745,-1.14147941132, -0.467677102483,1.43767405578,-1.17716837089, -0.467677102483,1.47231680411,-1.21288204396, -0.467677102483,1.50695955245,-1.24860956638, -0.467677102483,1.54160230078,-1.28436328573, -0.467677102483,1.57624504911,-1.32013278439, -0.467677102483,1.61088779744,-1.35591998428, -0.467677102483,1.64553054577,-1.39173216129, -0.467677102483,1.68017329411,-1.42755669505, -0.467677102483,1.71481604244,-1.46339727331, -0.502319850815,-1.71481604244,1.60098589024, -0.502319850815,-1.68017329411,1.58860738954, -0.502319850815,-1.64553054577,1.57351306314, -0.502319850815,-1.61088779744,1.5561799776, -0.502319850815,-1.57624504911,1.53704874267, -0.502319850815,-1.54160230078,1.51643535158, -0.502319850815,-1.50695955245,1.49452161482, -0.502319850815,-1.47231680411,1.47154260828, -0.502319850815,-1.43767405578,1.44759594092, -0.502319850815,-1.40303130745,1.42281673068, -0.502319850815,-1.36838855912,1.39728271814, -0.502319850815,-1.33374581079,1.3850393098, -0.502319850815,-1.29910306245,1.38039827947, -0.502319850815,-1.26446031412,1.37084383852, -0.502319850815,-1.22981756579,1.35749143649, -0.502319850815,-1.19517481746,1.34111735803, -0.502319850815,-1.16053206913,1.32228677897, -0.502319850815,-1.12588932079,1.3014269107, -0.502319850815,-1.09124657246,1.27691952084, -0.502319850815,-1.05660382413,1.24794547061, -0.502319850815,-1.0219610758,1.21867923589, -0.502319850815,-0.987318327465,1.18915868647, -0.502319850815,-0.952675579133,1.15938308548, -0.502319850815,-0.918032830801,1.12938175461, -0.502319850815,-0.883390082469,1.09916221287, -0.502319850815,-0.848747334136,1.06873714135, -0.502319850815,-0.814104585804,1.03812011466, -0.502319850815,-0.779461837472,1.0073214868, -0.502319850815,-0.74481908914,0.976339371533, -0.502319850815,-0.710176340808,0.945200115077, -0.502319850815,-0.675533592476,0.913897105772, -0.502319850815,-0.640890844144,0.882451118101, -0.502319850815,-0.606248095812,0.850846008343, -0.502319850815,-0.57160534748,0.819099776885, -0.502319850815,-0.536962599148,0.787232062592, -0.502319850815,-0.502319850815,0.755221234848, -0.502319850815,-0.467677102483,0.723088239765, -0.502319850815,-0.433034354151,0.690830590055, -0.502319850815,-0.398391605819,0.658453837989, -0.502319850815,-0.363748857487,0.625956620542, -0.502319850815,-0.329106109155,0.593347226236, -0.502319850815,-0.294463360823,0.560626195069, -0.502319850815,-0.259820612491,0.52780257318, -0.502319850815,-0.225177864159,0.494865661287, -0.502319850815,-0.190535115827,0.461833676894, -0.502319850815,-0.155892367494,0.428687834196, -0.502319850815,-0.121249619162,0.395448775644, -0.502319850815,-0.0866068708302,0.36211062894, -0.502319850815,-0.0519641224981,0.32868014784, -0.502319850815,-0.017321374166,0.295154191424, -0.502319850815,0.017321374166,0.261534039421, -0.502319850815,0.0519641224981,0.229074349371, -0.502319850815,0.0866068708302,0.196264327972, -0.502319850815,0.121249619162,0.162507583524, -0.502319850815,0.155892367494,0.128323676708, -0.502319850815,0.190535115827,0.0940664964441, -0.502319850815,0.225177864159,0.0597457573675, -0.502319850815,0.259820612491,0.0253599608219, -0.502319850815,0.294463360823,-0.00908995129026, -0.502319850815,0.329106109155,-0.0436093284679, -0.502319850815,0.363748857487,-0.0781766235033, -0.502319850815,0.398391605819,-0.1128188881, -0.502319850815,0.433034354151,-0.147498044292, -0.502319850815,0.467677102483,-0.182239298059, -0.502319850815,0.502319850815,-0.21703245216, -0.502319850815,0.536962599148,-0.251873756618, -0.502319850815,0.57160534748,-0.286762959856, -0.502319850815,0.606248095812,-0.321699795075, -0.502319850815,0.640890844144,-0.356681902431, -0.502319850815,0.675533592476,-0.391708256858, -0.502319850815,0.710176340808,-0.426770424927, -0.502319850815,0.74481908914,-0.461880697096, -0.502319850815,0.779461837472,-0.497025878177, -0.502319850815,0.814104585804,-0.532205250017, -0.502319850815,0.848747334136,-0.567418367201, -0.502319850815,0.883390082469,-0.602678599494, -0.502319850815,0.918032830801,-0.637969925363, -0.502319850815,0.952675579133,-0.673290965113, -0.502319850815,0.987318327465,-0.708644842411, -0.502319850815,1.0219610758,-0.744031883383, -0.502319850815,1.05660382413,-0.779445023439, -0.502319850815,1.09124657246,-0.814887934317, -0.502319850815,1.12588932079,-0.850359474424, -0.502319850815,1.16053206913,-0.885862749307, -0.502319850815,1.19517481746,-0.921389029814, -0.502319850815,1.22981756579,-0.95693562784, -0.502319850815,1.26446031412,-0.99251971805, -0.502319850815,1.29910306245,-1.02811542648, -0.502319850815,1.33374581079,-1.06374883136, -0.502319850815,1.36838855912,-1.09938761332, -0.502319850815,1.40303130745,-1.13505719384, -0.502319850815,1.43767405578,-1.1707497805, -0.502319850815,1.47231680411,-1.20646325469, -0.502319850815,1.50695955245,-1.24219583272, -0.502319850815,1.54160230078,-1.27795102796, -0.502319850815,1.57624504911,-1.3137178451, -0.502319850815,1.61088779744,-1.34951394495, -0.502319850815,1.64553054577,-1.38531781402, -0.502319850815,1.68017329411,-1.42115149718, -0.502319850815,1.71481604244,-1.45699783221, -0.536962599148,-1.71481604244,1.60676278251, -0.536962599148,-1.68017329411,1.59438625232, -0.536962599148,-1.64553054577,1.57925103338, -0.536962599148,-1.61088779744,1.56196298269, -0.536962599148,-1.57624504911,1.54283503963, -0.536962599148,-1.54160230078,1.52222242863, -0.536962599148,-1.50695955245,1.50031176344, -0.536962599148,-1.47231680411,1.47729190139, -0.536962599148,-1.43767405578,1.45334881255, -0.536962599148,-1.40303130745,1.42856124544, -0.536962599148,-1.36838855912,1.40303219955, -0.536962599148,-1.33374581079,1.39131209724, -0.536962599148,-1.29910306245,1.3866831022, -0.536962599148,-1.26446031412,1.37711835271, -0.536962599148,-1.22981756579,1.36377103337, -0.536962599148,-1.19517481746,1.3474003595, -0.536962599148,-1.16053206913,1.32856133123, -0.536962599148,-1.12588932079,1.30771033783, -0.536962599148,-1.09124657246,1.28296133206, -0.536962599148,-1.05660382413,1.25399869601, -0.536962599148,-1.0219610758,1.22473906329, -0.536962599148,-0.987318327465,1.19522258457, -0.536962599148,-0.952675579133,1.16545601977, -0.536962599148,-0.918032830801,1.13545926288, -0.536962599148,-0.883390082469,1.10525296199, -0.536962599148,-0.848747334136,1.07483895394, -0.536962599148,-0.814104585804,1.04422668504, -0.536962599148,-0.779461837472,1.01343811998, -0.536962599148,-0.74481908914,0.982473090617, -0.536962599148,-0.710176340808,0.951337064262, -0.536962599148,-0.675533592476,0.920040163474, -0.536962599148,-0.640890844144,0.888603520048, -0.536962599148,-0.606248095812,0.857008887642, -0.536962599148,-0.57160534748,0.825282355466, -0.536962599148,-0.536962599148,0.793410679918, -0.536962599148,-0.502319850815,0.761410663142, -0.536962599148,-0.467677102483,0.729285371065, -0.536962599148,-0.433034354151,0.697035525131, -0.536962599148,-0.398391605819,0.664667982149, -0.536962599148,-0.363748857487,0.632174879168, -0.536962599148,-0.329106109155,0.599574755282, -0.536962599148,-0.294463360823,0.566863558668, -0.536962599148,-0.259820612491,0.534043744928, -0.536962599148,-0.225177864159,0.501123603079, -0.536962599148,-0.190535115827,0.468087985843, -0.536962599148,-0.155892367494,0.434962360885, -0.536962599148,-0.121249619162,0.401727853635, -0.536962599148,-0.0866068708302,0.368401506509, -0.536962599148,-0.0519641224981,0.334968096053, -0.536962599148,-0.017321374166,0.301444726493, -0.536962599148,0.017321374166,0.267831977393, -0.536962599148,0.0519641224981,0.235350876973, -0.536962599148,0.0866068708302,0.202541797055, -0.536962599148,0.121249619162,0.168845324813, -0.536962599148,0.155892367494,0.13466378946, -0.536962599148,0.190535115827,0.100412773593, -0.536962599148,0.225177864159,0.066089496087, -0.536962599148,0.259820612491,0.031707506226, -0.536962599148,0.294463360823,-0.00275235164073, -0.536962599148,0.329106109155,-0.0372649364137, -0.536962599148,0.363748857487,-0.071833091392, -0.536962599148,0.398391605819,-0.10646613622, -0.536962599148,0.433034354151,-0.141150038073, -0.536962599148,0.467677102483,-0.175890356999, -0.536962599148,0.502319850815,-0.21068294139, -0.536962599148,0.536962599148,-0.245525574874, -0.536962599148,0.57160534748,-0.280415508705, -0.536962599148,0.606248095812,-0.315350229816, -0.536962599148,0.640890844144,-0.350336818588, -0.536962599148,0.675533592476,-0.385357896732, -0.536962599148,0.710176340808,-0.420423130805, -0.536962599148,0.74481908914,-0.455537350186, -0.536962599148,0.779461837472,-0.490681075377, -0.536962599148,0.814104585804,-0.525863007679, -0.536962599148,0.848747334136,-0.561092049819, -0.536962599148,0.883390082469,-0.59634657908, -0.536962599148,0.918032830801,-0.63163101259, -0.536962599148,0.952675579133,-0.666953741737, -0.536962599148,0.987318327465,-0.702307141639, -0.536962599148,1.0219610758,-0.737694160272, -0.536962599148,1.05660382413,-0.77311185078, -0.536962599148,1.09124657246,-0.808556553648, -0.536962599148,1.12588932079,-0.844028055293, -0.536962599148,1.16053206913,-0.879531953203, -0.536962599148,1.19517481746,-0.915054331967, -0.536962599148,1.22981756579,-0.950613076943, -0.536962599148,1.26446031412,-0.986191064645, -0.536962599148,1.29910306245,-1.02178680267, -0.536962599148,1.33374581079,-1.0574235296, -0.536962599148,1.36838855912,-1.09306643813, -0.536962599148,1.40303130745,-1.12873615298, -0.536962599148,1.43767405578,-1.16442956738, -0.536962599148,1.47231680411,-1.20014283015, -0.536962599148,1.50695955245,-1.23587924663, -0.536962599148,1.54160230078,-1.27163282385, -0.536962599148,1.57624504911,-1.30740952736, -0.536962599148,1.61088779744,-1.34320426568, -0.536962599148,1.64553054577,-1.3790085382, -0.536962599148,1.68017329411,-1.41484403592, -0.536962599148,1.71481604244,-1.45068979606, -0.57160534748,-1.71481604244,1.61243699088, -0.57160534748,-1.68017329411,1.60006212277, -0.57160534748,-1.64553054577,1.58493373798, -0.57160534748,-1.61088779744,1.56764820757, -0.57160534748,-1.57624504911,1.54851974155, -0.57160534748,-1.54160230078,1.52790873785, -0.57160534748,-1.50695955245,1.50600174313, -0.57160534748,-1.47231680411,1.4829844947, -0.57160534748,-1.43767405578,1.45904227296, -0.57160534748,-1.40303130745,1.4342597205, -0.57160534748,-1.36838855912,1.40873084564, -0.57160534748,-1.33374581079,1.39750012781, -0.57160534748,-1.29910306245,1.39286366724, -0.57160534748,-1.26446031412,1.38330441261, -0.57160534748,-1.22981756579,1.36995681636, -0.57160534748,-1.19517481746,1.35358446814, -0.57160534748,-1.16053206913,1.33474625248, -0.57160534748,-1.12588932079,1.3138986677, -0.57160534748,-1.09124657246,1.28893438398, -0.57160534748,-1.05660382413,1.25995597095, -0.57160534748,-1.0219610758,1.23071019431, -0.57160534748,-0.987318327465,1.20120031069, -0.57160534748,-0.952675579133,1.17144385689, -0.57160534748,-0.918032830801,1.14145868273, -0.57160534748,-0.883390082469,1.11125949471, -0.57160534748,-0.848747334136,1.08084636167, -0.57160534748,-0.814104585804,1.05024650416, -0.57160534748,-0.779461837472,1.01946243733, -0.57160534748,-0.74481908914,0.988504486283, -0.57160534748,-0.710176340808,0.957384411829, -0.57160534748,-0.675533592476,0.926097816976, -0.57160534748,-0.640890844144,0.894661231355, -0.57160534748,-0.606248095812,0.863076608535, -0.57160534748,-0.57160534748,0.831349526246, -0.57160534748,-0.536962599148,0.799491545696, -0.57160534748,-0.502319850815,0.767502348345, -0.57160534748,-0.467677102483,0.735385448963, -0.57160534748,-0.433034354151,0.7031451898, -0.57160534748,-0.398391605819,0.670783074883, -0.57160534748,-0.363748857487,0.638304369423, -0.57160534748,-0.329106109155,0.605709204426, -0.57160534748,-0.294463360823,0.573005339379, -0.57160534748,-0.259820612491,0.540197922079, -0.57160534748,-0.225177864159,0.50727767598, -0.57160534748,-0.190535115827,0.474253416122, -0.57160534748,-0.155892367494,0.44112953571, -0.57160534748,-0.121249619162,0.407900103415, -0.57160534748,-0.0866068708302,0.374583397245, -0.57160534748,-0.0519641224981,0.341161631617, -0.57160534748,-0.017321374166,0.307639844466, -0.57160534748,0.017321374166,0.274032515995, -0.57160534748,0.0519641224981,0.241534939683, -0.57160534748,0.0866068708302,0.208725403587, -0.57160534748,0.121249619162,0.175085513036, -0.57160534748,0.155892367494,0.140903221257, -0.57160534748,0.190535115827,0.106656780725, -0.57160534748,0.225177864159,0.0723335141432, -0.57160534748,0.259820612491,0.0379553357138, -0.57160534748,0.294463360823,0.00350335285979, -0.57160534748,0.329106109155,-0.0310180288882, -0.57160534748,0.363748857487,-0.0655834148549, -0.57160534748,0.398391605819,-0.100206139319, -0.57160534748,0.433034354151,-0.134903552164, -0.57160534748,0.467677102483,-0.169640066979, -0.57160534748,0.502319850815,-0.204434050809, -0.57160534748,0.536962599148,-0.239273918374, -0.57160534748,0.57160534748,-0.274166175632, -0.57160534748,0.606248095812,-0.309104533537, -0.57160534748,0.640890844144,-0.344084146623, -0.57160534748,0.675533592476,-0.379107833298, -0.57160534748,0.710176340808,-0.414182052066, -0.57160534748,0.74481908914,-0.449283634438, -0.57160534748,0.779461837472,-0.484428763739, -0.57160534748,0.814104585804,-0.519620588756, -0.57160534748,0.848747334136,-0.554847037677, -0.57160534748,0.883390082469,-0.590094013539, -0.57160534748,0.918032830801,-0.625388488083, -0.57160534748,0.952675579133,-0.660710485313, -0.57160534748,0.987318327465,-0.696066844142, -0.57160534748,1.0219610758,-0.73145457661, -0.57160534748,1.05660382413,-0.766872037597, -0.57160534748,1.09124657246,-0.802315607443, -0.57160534748,1.12588932079,-0.837793108276, -0.57160534748,1.16053206913,-0.873294494068, -0.57160534748,1.19517481746,-0.908821414653, -0.57160534748,1.22981756579,-0.9443742987, -0.57160534748,1.26446031412,-0.979951550719, -0.57160534748,1.29910306245,-1.01555817874, -0.57160534748,1.33374581079,-1.05118043677, -0.57160534748,1.36838855912,-1.08683877719, -0.57160534748,1.40303130745,-1.12251311931, -0.57160534748,1.43767405578,-1.15820789455, -0.57160534748,1.47231680411,-1.19392152868, -0.57160534748,1.50695955245,-1.22966137852, -0.57160534748,1.54160230078,-1.26541660038, -0.57160534748,1.57624504911,-1.30119167443, -0.57160534748,1.61088779744,-1.33698819084, -0.57160534748,1.64553054577,-1.37280080109, -0.57160534748,1.68017329411,-1.40863142978, -0.57160534748,1.71481604244,-1.4444835029, -0.606248095812,-1.71481604244,1.61806831264, -0.606248095812,-1.68017329411,1.60569462612, -0.606248095812,-1.64553054577,1.59056534556, -0.606248095812,-1.61088779744,1.5732305562, -0.606248095812,-1.57624504911,1.5541163178, -0.606248095812,-1.54160230078,1.53350341251, -0.606248095812,-1.50695955245,1.51159534485, -0.606248095812,-1.47231680411,1.48858105158, -0.606248095812,-1.43767405578,1.46464709822, -0.606248095812,-1.40303130745,1.43986119028, -0.606248095812,-1.36838855912,1.41434036338, -0.606248095812,-1.33374581079,1.40358522805, -0.606248095812,-1.29910306245,1.39895387198, -0.606248095812,-1.26446031412,1.38940425284, -0.606248095812,-1.22981756579,1.3760514893, -0.606248095812,-1.19517481746,1.35967283423, -0.606248095812,-1.16053206913,1.34084388186, -0.606248095812,-1.12588932079,1.31997954749, -0.606248095812,-1.09124657246,1.2947880209, -0.606248095812,-1.05660382413,1.26583829694, -0.606248095812,-1.0219610758,1.23659517302, -0.606248095812,-0.987318327465,1.2070941869, -0.606248095812,-0.952675579133,1.17734268525, -0.606248095812,-0.918032830801,1.14736385649, -0.606248095812,-0.883390082469,1.117167435, -0.606248095812,-0.848747334136,1.08676713902, -0.606248095812,-0.814104585804,1.05617074641, -0.606248095812,-0.779461837472,1.02539722383, -0.606248095812,-0.74481908914,0.99444474302, -0.606248095812,-0.710176340808,0.963335875423, -0.606248095812,-0.675533592476,0.932051666761, -0.606248095812,-0.640890844144,0.900627198533, -0.606248095812,-0.606248095812,0.869052145226, -0.606248095812,-0.57160534748,0.837338792781, -0.606248095812,-0.536962599148,0.805487432158, -0.606248095812,-0.502319850815,0.773506195362, -0.606248095812,-0.467677102483,0.741399464598, -0.606248095812,-0.433034354151,0.709165599752, -0.606248095812,-0.398391605819,0.676813222722, -0.606248095812,-0.363748857487,0.644334692395, -0.606248095812,-0.329106109155,0.611753282591, -0.606248095812,-0.294463360823,0.57906031389, -0.606248095812,-0.259820612491,0.546253479612, -0.606248095812,-0.225177864159,0.513339605414, -0.606248095812,-0.190535115827,0.4803227325, -0.606248095812,-0.155892367494,0.447204497495, -0.606248095812,-0.121249619162,0.413982611448, -0.606248095812,-0.0866068708302,0.380660336773, -0.606248095812,-0.0519641224981,0.347245117239, -0.606248095812,-0.017321374166,0.313740208177, -0.606248095812,0.017321374166,0.280138653238, -0.606248095812,0.0519641224981,0.247626120929, -0.606248095812,0.0866068708302,0.214814326024, -0.606248095812,0.121249619162,0.181231106538, -0.606248095812,0.155892367494,0.147055076427, -0.606248095812,0.190535115827,0.112807729825, -0.606248095812,0.225177864159,0.0784878760868, -0.606248095812,0.259820612491,0.0441065882465, -0.606248095812,0.294463360823,0.00964956464694, -0.606248095812,0.329106109155,-0.0248541422248, -0.606248095812,0.363748857487,-0.0594249750854, -0.606248095812,0.398391605819,-0.0940525961196, -0.606248095812,0.433034354151,-0.128753363356, -0.606248095812,0.467677102483,-0.163485386403, -0.606248095812,0.502319850815,-0.198277143477, -0.606248095812,0.536962599148,-0.233119152963, -0.606248095812,0.57160534748,-0.268011964827, -0.606248095812,0.606248095812,-0.302950116, -0.606248095812,0.640890844144,-0.337932191013, -0.606248095812,0.675533592476,-0.37295487927, -0.606248095812,0.710176340808,-0.408028218013, -0.606248095812,0.74481908914,-0.443135440827, -0.606248095812,0.779461837472,-0.478277229885, -0.606248095812,0.814104585804,-0.513462012698, -0.606248095812,0.848747334136,-0.548697071153, -0.606248095812,0.883390082469,-0.58395587081, -0.606248095812,0.918032830801,-0.61923949945, -0.606248095812,0.952675579133,-0.65456370212, -0.606248095812,0.987318327465,-0.689921004935, -0.606248095812,1.0219610758,-0.725310121509, -0.606248095812,1.05660382413,-0.760727336718, -0.606248095812,1.09124657246,-0.796173108657, -0.606248095812,1.12588932079,-0.831651763199, -0.606248095812,1.16053206913,-0.867155120488, -0.606248095812,1.19517481746,-0.902686937185, -0.606248095812,1.22981756579,-0.938238388413, -0.606248095812,1.26446031412,-0.973823797399, -0.606248095812,1.29910306245,-1.00942636524, -0.606248095812,1.33374581079,-1.04505324501, -0.606248095812,1.36838855912,-1.08070832292, -0.606248095812,1.40303130745,-1.1163825625, -0.606248095812,1.43767405578,-1.1520787, -0.606248095812,1.47231680411,-1.18779622836, -0.606248095812,1.50695955245,-1.22353488162, -0.606248095812,1.54160230078,-1.25929390099, -0.606248095812,1.57624504911,-1.29506797726, -0.606248095812,1.61088779744,-1.33086307663, -0.606248095812,1.64553054577,-1.3666826287, -0.606248095812,1.68017329411,-1.4025109203, -0.606248095812,1.71481604244,-1.43836330229, -0.640890844144,-1.71481604244,1.62356102077, -0.640890844144,-1.68017329411,1.61118930687, -0.640890844144,-1.64553054577,1.59606029607, -0.640890844144,-1.61088779744,1.57877761221, -0.640890844144,-1.57624504911,1.55965558476, -0.640890844144,-1.54160230078,1.53900449599, -0.640890844144,-1.50695955245,1.51710187536, -0.640890844144,-1.47231680411,1.49413009007, -0.640890844144,-1.43767405578,1.47015177081, -0.640890844144,-1.40303130745,1.44536926822, -0.640890844144,-1.36838855912,1.41985446495, -0.640890844144,-1.33374581079,1.40959051726, -0.640890844144,-1.29910306245,1.40495624893, -0.640890844144,-1.26446031412,1.3953991266, -0.640890844144,-1.22981756579,1.38205764341, -0.640890844144,-1.19517481746,1.3656805623, -0.640890844144,-1.16053206913,1.34684319358, -0.640890844144,-1.12588932079,1.32598644161, -0.640890844144,-1.09124657246,1.30057755093, -0.640890844144,-1.05660382413,1.27161830507, -0.640890844144,-1.0219610758,1.24238309427, -0.640890844144,-0.987318327465,1.21289358792, -0.640890844144,-0.952675579133,1.18314920709, -0.640890844144,-0.918032830801,1.15317787346, -0.640890844144,-0.883390082469,1.12298824711, -0.640890844144,-0.848747334136,1.09259906392, -0.640890844144,-0.814104585804,1.06201883006, -0.640890844144,-0.779461837472,1.0312451387, -0.640890844144,-0.74481908914,1.00030398736, -0.640890844144,-0.710176340808,0.969194629549, -0.640890844144,-0.675533592476,0.937925517637, -0.640890844144,-0.640890844144,0.906515884592, -0.640890844144,-0.606248095812,0.874938331436, -0.640890844144,-0.57160534748,0.843235837984, -0.640890844144,-0.536962599148,0.811404262636, -0.640890844144,-0.502319850815,0.779420271166, -0.640890844144,-0.467677102483,0.747322016748, -0.640890844144,-0.433034354151,0.715096288155, -0.640890844144,-0.398391605819,0.682750032531, -0.640890844144,-0.363748857487,0.650285707753, -0.640890844144,-0.329106109155,0.617704740553, -0.640890844144,-0.294463360823,0.585019376172, -0.640890844144,-0.259820612491,0.552220392985, -0.640890844144,-0.225177864159,0.519319982124, -0.640890844144,-0.190535115827,0.486308248558, -0.640890844144,-0.155892367494,0.453200859871, -0.640890844144,-0.121249619162,0.41997786718, -0.640890844144,-0.0866068708302,0.386666403303, -0.640890844144,-0.0519641224981,0.353258485842, -0.640890844144,-0.017321374166,0.319755031937, -0.640890844144,0.017321374166,0.286155734281, -0.640890844144,0.0519641224981,0.253624252027, -0.640890844144,0.0866068708302,0.220814900767, -0.640890844144,0.121249619162,0.187284931076, -0.640890844144,0.155892367494,0.153111983622, -0.640890844144,0.190535115827,0.118862635442, -0.640890844144,0.225177864159,0.0845482501043, -0.640890844144,0.259820612491,0.0501642545847, -0.640890844144,0.294463360823,0.0157186986592, -0.640890844144,0.329106109155,-0.0187938445277, -0.640890844144,0.363748857487,-0.0533685151525, -0.640890844144,0.398391605819,-0.0880016591362, -0.640890844144,0.433034354151,-0.122690904354, -0.640890844144,0.467677102483,-0.157421197969, -0.640890844144,0.502319850815,-0.192212265867, -0.640890844144,0.536962599148,-0.227055142101, -0.640890844144,0.57160534748,-0.261946306571, -0.640890844144,0.606248095812,-0.296884451762, -0.640890844144,0.640890844144,-0.331867127725, -0.640890844144,0.675533592476,-0.366895999752, -0.640890844144,0.710176340808,-0.401966853225, -0.640890844144,0.74481908914,-0.437071398686, -0.640890844144,0.779461837472,-0.472223117889, -0.640890844144,0.814104585804,-0.507410300675, -0.640890844144,0.848747334136,-0.542639291035, -0.640890844144,0.883390082469,-0.577892347116, -0.640890844144,0.918032830801,-0.613183414698, -0.640890844144,0.952675579133,-0.648510404635, -0.640890844144,0.987318327465,-0.683866810447, -0.640890844144,1.0219610758,-0.719257921315, -0.640890844144,1.05660382413,-0.754674876223, -0.640890844144,1.09124657246,-0.790125892696, -0.640890844144,1.12588932079,-0.825601274966, -0.640890844144,1.16053206913,-0.861103572015, -0.640890844144,1.19517481746,-0.896639237608, -0.640890844144,1.22981756579,-0.932191674719, -0.640890844144,1.26446031412,-0.967779355686, -0.640890844144,1.29910306245,-1.00338832616, -0.640890844144,1.33374581079,-1.03902012634, -0.640890844144,1.36838855912,-1.07466791851, -0.640890844144,1.40303130745,-1.11034182077, -0.640890844144,1.43767405578,-1.14603932001, -0.640890844144,1.47231680411,-1.1817604915, -0.640890844144,1.50695955245,-1.21749718458, -0.640890844144,1.54160230078,-1.25325703485, -0.640890844144,1.57624504911,-1.28903561948, -0.640890844144,1.61088779744,-1.32483339933, -0.640890844144,1.64553054577,-1.36065159489, -0.640890844144,1.68017329411,-1.39648985246, -0.640890844144,1.71481604244,-1.4323389902, -0.675533592476,-1.71481604244,1.62901127167, -0.675533592476,-1.68017329411,1.61664084742, -0.675533592476,-1.64553054577,1.60151241428, -0.675533592476,-1.61088779744,1.58418518352, -0.675533592476,-1.57624504911,1.56506564772, -0.675533592476,-1.54160230078,1.54446053216, -0.675533592476,-1.50695955245,1.52255775526, -0.675533592476,-1.47231680411,1.49955006479, -0.675533592476,-1.43767405578,1.47561654765, -0.675533592476,-1.40303130745,1.45083509012, -0.675533592476,-1.36838855912,1.42531279733, -0.675533592476,-1.33374581079,1.41549880491, -0.675533592476,-1.29910306245,1.41087322879, -0.675533592476,-1.26446031412,1.4013132393, -0.675533592476,-1.22981756579,1.38796691815, -0.675533592476,-1.19517481746,1.37159770757, -0.675533592476,-1.16053206913,1.35276041588, -0.675533592476,-1.12588932079,1.33190629845, -0.675533592476,-1.09124657246,1.3062712622, -0.675533592476,-1.05660382413,1.27733170121, -0.675533592476,-1.0219610758,1.24809686278, -0.675533592476,-0.987318327465,1.21860673716, -0.675533592476,-0.952675579133,1.18887804037, -0.675533592476,-0.918032830801,1.15891038036, -0.675533592476,-0.883390082469,1.12873231519, -0.675533592476,-0.848747334136,1.09834938468, -0.675533592476,-0.814104585804,1.06777662486, -0.675533592476,-0.779461837472,1.03700872294, -0.675533592476,-0.74481908914,1.0060771279, -0.675533592476,-0.710176340808,0.974980317389, -0.675533592476,-0.675533592476,0.943721307614, -0.675533592476,-0.640890844144,0.912306329807, -0.675533592476,-0.606248095812,0.880751103516, -0.675533592476,-0.57160534748,0.849043591069, -0.675533592476,-0.536962599148,0.817225737495, -0.675533592476,-0.502319850815,0.785249399614, -0.675533592476,-0.467677102483,0.753155941571, -0.675533592476,-0.433034354151,0.720937024507, -0.675533592476,-0.398391605819,0.688603309326, -0.675533592476,-0.363748857487,0.656143166978, -0.675533592476,-0.329106109155,0.623575887569, -0.675533592476,-0.294463360823,0.590891222338, -0.675533592476,-0.259820612491,0.558101207128, -0.675533592476,-0.225177864159,0.525205448555, -0.675533592476,-0.190535115827,0.492203081693, -0.675533592476,-0.155892367494,0.459099101117, -0.675533592476,-0.121249619162,0.425888261625, -0.675533592476,-0.0866068708302,0.392587881606, -0.675533592476,-0.0519641224981,0.359185314301, -0.675533592476,-0.017321374166,0.325678356834, -0.675533592476,0.017321374166,0.292083862262, -0.675533592476,0.0519641224981,0.25953787952, -0.675533592476,0.0866068708302,0.226726273983, -0.675533592476,0.121249619162,0.193249687622, -0.675533592476,0.155892367494,0.159076912418, -0.675533592476,0.190535115827,0.124835575643, -0.675533592476,0.225177864159,0.090517519117, -0.675533592476,0.259820612491,0.0561389131069, -0.675533592476,0.294463360823,0.0216847037871, -0.675533592476,0.329106109155,-0.0128225724421, -0.675533592476,0.363748857487,-0.0473975867023, -0.675533592476,0.398391605819,-0.0820191485281, -0.675533592476,0.433034354151,-0.116713831847, -0.675533592476,0.467677102483,-0.151447074466, -0.675533592476,0.502319850815,-0.18623926232, -0.675533592476,0.536962599148,-0.221082317235, -0.675533592476,0.57160534748,-0.255973994524, -0.675533592476,0.606248095812,-0.290913671908, -0.675533592476,0.640890844144,-0.325896858372, -0.675533592476,0.675533592476,-0.360922258699, -0.675533592476,0.710176340808,-0.395995206315, -0.675533592476,0.74481908914,-0.431106560298, -0.675533592476,0.779461837472,-0.466253081839, -0.675533592476,0.814104585804,-0.501437282393, -0.675533592476,0.848747334136,-0.53665658633, -0.675533592476,0.883390082469,-0.571919335137, -0.675533592476,0.918032830801,-0.60721540208, -0.675533592476,0.952675579133,-0.642542896121, -0.675533592476,0.987318327465,-0.677901570824, -0.675533592476,1.0219610758,-0.713291795198, -0.675533592476,1.05660382413,-0.748711913008, -0.675533592476,1.09124657246,-0.784161201513, -0.675533592476,1.12588932079,-0.81963901646, -0.675533592476,1.16053206913,-0.855144399382, -0.675533592476,1.19517481746,-0.890676034401, -0.675533592476,1.22981756579,-0.926241489499, -0.675533592476,1.26446031412,-0.961816236274, -0.675533592476,1.29910306245,-0.99742721523, -0.675533592476,1.33374581079,-1.03306152174, -0.675533592476,1.36838855912,-1.06872490928, -0.675533592476,1.40303130745,-1.10439307311, -0.675533592476,1.43767405578,-1.14009284239, -0.675533592476,1.47231680411,-1.17581178258, -0.675533592476,1.50695955245,-1.2115538429, -0.675533592476,1.54160230078,-1.24731335738, -0.675533592476,1.57624504911,-1.28309190954, -0.675533592476,1.61088779744,-1.31889611422, -0.675533592476,1.64553054577,-1.3547134927, -0.675533592476,1.68017329411,-1.39054543104, -0.675533592476,1.71481604244,-1.4264074769, -0.710176340808,-1.71481604244,1.63437353824, -0.710176340808,-1.68017329411,1.62200777718, -0.710176340808,-1.64553054577,1.60687702637, -0.710176340808,-1.61088779744,1.5895526182, -0.710176340808,-1.57624504911,1.57043213657, -0.710176340808,-1.54160230078,1.54983217263, -0.710176340808,-1.50695955245,1.52793049153, -0.710176340808,-1.47231680411,1.50491422291, -0.710176340808,-1.43767405578,1.48094474849, -0.710176340808,-1.40303130745,1.45617292068, -0.710176340808,-1.36838855912,1.4306543919, -0.710176340808,-1.33374581079,1.421331808, -0.710176340808,-1.29910306245,1.41670714567, -0.710176340808,-1.26446031412,1.40714854015, -0.710176340808,-1.22981756579,1.39380369513, -0.710176340808,-1.19517481746,1.3774270387, -0.710176340808,-1.16053206913,1.35859760525, -0.710176340808,-1.12588932079,1.33774158608, -0.710176340808,-1.09124657246,1.31188837502, -0.710176340808,-1.05660382413,1.28294312733, -0.710176340808,-1.0219610758,1.2537255231, -0.710176340808,-0.987318327465,1.22424114068, -0.710176340808,-0.952675579133,1.1945170355, -0.710176340808,-0.918032830801,1.16456361273, -0.710176340808,-0.883390082469,1.13439389742, -0.710176340808,-0.848747334136,1.10401592375, -0.710176340808,-0.814104585804,1.07344705383, -0.710176340808,-0.779461837472,1.0426963603, -0.710176340808,-0.74481908914,1.0117667286, -0.710176340808,-0.710176340808,0.980670166371, -0.710176340808,-0.675533592476,0.94942205112, -0.710176340808,-0.640890844144,0.918024099454, -0.710176340808,-0.606248095812,0.886466203815, -0.710176340808,-0.57160534748,0.854779881888, -0.710176340808,-0.536962599148,0.822955128883, -0.710176340808,-0.502319850815,0.790995984649, -0.710176340808,-0.467677102483,0.758908768945, -0.710176340808,-0.433034354151,0.726701930133, -0.710176340808,-0.398391605819,0.694371992584, -0.710176340808,-0.363748857487,0.661917943344, -0.710176340808,-0.329106109155,0.629359546248, -0.710176340808,-0.294463360823,0.596678393629, -0.710176340808,-0.259820612491,0.563898359471, -0.710176340808,-0.225177864159,0.531006598753, -0.710176340808,-0.190535115827,0.498010035134, -0.710176340808,-0.155892367494,0.46491293201, -0.710176340808,-0.121249619162,0.431716092253, -0.710176340808,-0.0866068708302,0.398412749218, -0.710176340808,-0.0519641224981,0.365011179488, -0.710176340808,-0.017321374166,0.331520967752, -0.710176340808,0.017321374166,0.297928000551, -0.710176340808,0.0519641224981,0.265366513798, -0.710176340808,0.0866068708302,0.23255434216, -0.710176340808,0.121249619162,0.199131776358, -0.710176340808,0.155892367494,0.164961726758, -0.710176340808,0.190535115827,0.130717826168, -0.710176340808,0.225177864159,0.0964047679778, -0.710176340808,0.259820612491,0.0620176115404, -0.710176340808,0.294463360823,0.0275780372127, -0.710176340808,0.329106109155,-0.00693775423217, -0.710176340808,0.363748857487,-0.0415099130605, -0.710176340808,0.398391605819,-0.0761339204302, -0.710176340808,0.433034354151,-0.110819889408, -0.710176340808,0.467677102483,-0.145558270459, -0.710176340808,0.502319850815,-0.180350361376, -0.710176340808,0.536962599148,-0.215194980267, -0.710176340808,0.57160534748,-0.250085095431, -0.710176340808,0.606248095812,-0.28502639524, -0.710176340808,0.640890844144,-0.320008443262, -0.710176340808,0.675533592476,-0.355037287085, -0.710176340808,0.710176340808,-0.390103668059, -0.710176340808,0.74481908914,-0.425220887114, -0.710176340808,0.779461837472,-0.460364966976, -0.710176340808,0.814104585804,-0.495553002291, -0.710176340808,0.848747334136,-0.530775515044, -0.710176340808,0.883390082469,-0.566034139589, -0.710176340808,0.918032830801,-0.601329010154, -0.710176340808,0.952675579133,-0.636663583037, -0.710176340808,0.987318327465,-0.672025516125, -0.710176340808,1.0219610758,-0.70741609026, -0.710176340808,1.05660382413,-0.742835825155, -0.710176340808,1.09124657246,-0.778286473392, -0.710176340808,1.12588932079,-0.81376811194, -0.710176340808,1.16053206913,-0.849274733017, -0.710176340808,1.19517481746,-0.884803134623, -0.710176340808,1.22981756579,-0.920365518726, -0.710176340808,1.26446031412,-0.95595525106, -0.710176340808,1.29910306245,-0.991555024027, -0.710176340808,1.33374581079,-1.02719222749, -0.710176340808,1.36838855912,-1.06284130215, -0.710176340808,1.40303130745,-1.09852887491, -0.710176340808,1.43767405578,-1.13422811893, -0.710176340808,1.47231680411,-1.16995093772, -0.710176340808,1.50695955245,-1.20569400659, -0.710176340808,1.54160230078,-1.24145526295, -0.710176340808,1.57624504911,-1.27723981992, -0.710176340808,1.61088779744,-1.31304170655, -0.710176340808,1.64553054577,-1.34885748432, -0.710176340808,1.68017329411,-1.38469493867, -0.710176340808,1.71481604244,-1.42055457823, -0.74481908914,-1.71481604244,1.63965092634, -0.74481908914,-1.68017329411,1.62728627794, -0.74481908914,-1.64553054577,1.61216078935, -0.74481908914,-1.61088779744,1.59483636299, -0.74481908914,-1.57624504911,1.57572039682, -0.74481908914,-1.54160230078,1.55511748592, -0.74481908914,-1.50695955245,1.53316982462, -0.74481908914,-1.47231680411,1.51020541007, -0.74481908914,-1.43767405578,1.48623004778, -0.74481908914,-1.40303130745,1.46146441533, -0.74481908914,-1.36838855912,1.43594448599, -0.74481908914,-1.33374581079,1.42708218441, -0.74481908914,-1.29910306245,1.42245109296, -0.74481908914,-1.26446031412,1.41289732777, -0.74481908914,-1.22981756579,1.39954885353, -0.74481908914,-1.19517481746,1.38317119631, -0.74481908914,-1.16053206913,1.36434456416, -0.74481908914,-1.12588932079,1.34348116405, -0.74481908914,-1.09124657246,1.31741550323, -0.74481908914,-1.05660382413,1.28849201525, -0.74481908914,-1.0219610758,1.25927171451, -0.74481908914,-0.987318327465,1.22980128894, -0.74481908914,-0.952675579133,1.20008289825, -0.74481908914,-0.918032830801,1.17013654052, -0.74481908914,-0.883390082469,1.139971703, -0.74481908914,-0.848747334136,1.10960117415, -0.74481908914,-0.814104585804,1.07904284814, -0.74481908914,-0.779461837472,1.04829830545, -0.74481908914,-0.74481908914,1.01737523792, -0.74481908914,-0.710176340808,0.986291210081, -0.74481908914,-0.675533592476,0.955049463311, -0.74481908914,-0.640890844144,0.923649310025, -0.74481908914,-0.606248095812,0.892112225496, -0.74481908914,-0.57160534748,0.860431495619, -0.74481908914,-0.536962599148,0.82861265068, -0.74481908914,-0.502319850815,0.796666336724, -0.74481908914,-0.467677102483,0.764580330015, -0.74481908914,-0.433034354151,0.732378983611, -0.74481908914,-0.398391605819,0.700058527707, -0.74481908914,-0.363748857487,0.667608532376, -0.74481908914,-0.329106109155,0.635058382201, -0.74481908914,-0.294463360823,0.602393766991, -0.74481908914,-0.259820612491,0.569614185877, -0.74481908914,-0.225177864159,0.536733038191, -0.74481908914,-0.190535115827,0.50374027691, -0.74481908914,-0.155892367494,0.470644730317, -0.74481908914,-0.121249619162,0.437451786018, -0.74481908914,-0.0866068708302,0.40415826337, -0.74481908914,-0.0519641224981,0.370756183885, -0.74481908914,-0.017321374166,0.337279108969, -0.74481908914,0.017321374166,0.303688176883, -0.74481908914,0.0519641224981,0.271109887021, -0.74481908914,0.0866068708302,0.238298228547, -0.74481908914,0.121249619162,0.204929638025, -0.74481908914,0.155892367494,0.170759580326, -0.74481908914,0.190535115827,0.136517403107, -0.74481908914,0.225177864159,0.102205930011, -0.74481908914,0.259820612491,0.0678254935086, -0.74481908914,0.294463360823,0.0333740680702, -0.74481908914,0.329106109155,-0.00112667957796, -0.74481908914,0.363748857487,-0.0357033024851, -0.74481908914,0.398391605819,-0.0703281928836, -0.74481908914,0.433034354151,-0.10500690362, -0.74481908914,0.467677102483,-0.139754453667, -0.74481908914,0.502319850815,-0.174545712494, -0.74481908914,0.536962599148,-0.209390752716, -0.74481908914,0.57160534748,-0.244280805744, -0.74481908914,0.606248095812,-0.279220408792, -0.74481908914,0.640890844144,-0.314204608367, -0.74481908914,0.675533592476,-0.349232724609, -0.74481908914,0.710176340808,-0.384303878748, -0.74481908914,0.74481908914,-0.419420590875, -0.74481908914,0.779461837472,-0.454566284694, -0.74481908914,0.814104585804,-0.489754807083, -0.74481908914,0.848747334136,-0.524978770766, -0.74481908914,0.883390082469,-0.560250337725, -0.74481908914,0.918032830801,-0.595537560477, -0.74481908914,0.952675579133,-0.630869851465, -0.74481908914,0.987318327465,-0.666230497369, -0.74481908914,1.0219610758,-0.701621514994, -0.74481908914,1.05660382413,-0.737044104866, -0.74481908914,1.09124657246,-0.772498941808, -0.74481908914,1.12588932079,-0.807974712015, -0.74481908914,1.16053206913,-0.843485308066, -0.74481908914,1.19517481746,-0.8790177413, -0.74481908914,1.22981756579,-0.914580854092, -0.74481908914,1.26446031412,-0.950170500608, -0.74481908914,1.29910306245,-0.985782243974, -0.74481908914,1.33374581079,-1.02140952509, -0.74481908914,1.36838855912,-1.05706744051, -0.74481908914,1.40303130745,-1.09274689749, -0.74481908914,1.43767405578,-1.12844837926, -0.74481908914,1.47231680411,-1.16417217306, -0.74481908914,1.50695955245,-1.19991542836, -0.74481908914,1.54160230078,-1.2356803296, -0.74481908914,1.57624504911,-1.27146563864, -0.74481908914,1.61088779744,-1.30726797447, -0.74481908914,1.64553054577,-1.34308910966, -0.74481908914,1.68017329411,-1.37892609318, -0.74481908914,1.71481604244,-1.41477844411, -0.779461837472,-1.71481604244,1.64484942775, -0.779461837472,-1.68017329411,1.63248279959, -0.779461837472,-1.64553054577,1.6173593349, -0.779461837472,-1.61088779744,1.60003544972, -0.779461837472,-1.57624504911,1.5809202944, -0.779461837472,-1.54160230078,1.56031951167, -0.779461837472,-1.50695955245,1.53842181383, -0.779461837472,-1.47231680411,1.51541408703, -0.779461837472,-1.43767405578,1.49143966865, -0.779461837472,-1.40303130745,1.46667281883, -0.779461837472,-1.36838855912,1.44115846644, -0.779461837472,-1.33374581079,1.43274354377, -0.779461837472,-1.29910306245,1.42811687952, -0.779461837472,-1.26446031412,1.41856222677, -0.779461837472,-1.22981756579,1.40521539926, -0.779461837472,-1.19517481746,1.38884349988, -0.779461837472,-1.16053206913,1.3700042223, -0.779461837472,-1.12588932079,1.34915468472, -0.779461837472,-1.09124657246,1.32288567234, -0.779461837472,-1.05660382413,1.2939448196, -0.779461837472,-1.0219610758,1.26474591676, -0.779461837472,-0.987318327465,1.23527982084, -0.779461837472,-0.952675579133,1.20556938493, -0.779461837472,-0.918032830801,1.17562529735, -0.779461837472,-0.883390082469,1.14546831705, -0.779461837472,-0.848747334136,1.1151075161, -0.779461837472,-0.814104585804,1.08456100501, -0.779461837472,-0.779461837472,1.05381727136, -0.779461837472,-0.74481908914,1.02291156011, -0.779461837472,-0.710176340808,0.991829491547, -0.779461837472,-0.675533592476,0.960596317898, -0.779461837472,-0.640890844144,0.929206041916, -0.779461837472,-0.606248095812,0.897666157341, -0.779461837472,-0.57160534748,0.866001013118, -0.779461837472,-0.536962599148,0.834183198938, -0.779461837472,-0.502319850815,0.802238948206, -0.779461837472,-0.467677102483,0.770172909896, -0.779461837472,-0.433034354151,0.737979022975, -0.779461837472,-0.398391605819,0.7056652542, -0.779461837472,-0.363748857487,0.673228482774, -0.779461837472,-0.329106109155,0.640679261764, -0.779461837472,-0.294463360823,0.608018490884, -0.779461837472,-0.259820612491,0.575250926189, -0.779461837472,-0.225177864159,0.542372412871, -0.779461837472,-0.190535115827,0.509387392345, -0.779461837472,-0.155892367494,0.476296774901, -0.779461837472,-0.121249619162,0.443109897558, -0.779461837472,-0.0866068708302,0.409826468689, -0.779461837472,-0.0519641224981,0.3764384148, -0.779461837472,-0.017321374166,0.342953350106, -0.779461837472,0.017321374166,0.309369010762, -0.779461837472,0.0519641224981,0.276775732649, -0.779461837472,0.0866068708302,0.243963432765, -0.779461837472,0.121249619162,0.210642048083, -0.779461837472,0.155892367494,0.17647734735, -0.779461837472,0.190535115827,0.142231505035, -0.779461837472,0.225177864159,0.107923535835, -0.779461837472,0.259820612491,0.0735425529245, -0.779461837472,0.294463360823,0.0391014673491, -0.779461837472,0.329106109155,0.00459222878548, -0.779461837472,0.363748857487,-0.0299756442911, -0.779461837472,0.398391605819,-0.064613998256, -0.779461837472,0.433034354151,-0.0992894098886, -0.779461837472,0.467677102483,-0.13403318703, -0.779461837472,0.502319850815,-0.168825283453, -0.779461837472,0.536962599148,-0.203670135303, -0.779461837472,0.57160534748,-0.23856202535, -0.779461837472,0.606248095812,-0.273501436121, -0.779461837472,0.640890844144,-0.308487616601, -0.779461837472,0.675533592476,-0.343512058257, -0.779461837472,0.710176340808,-0.378586246497, -0.779461837472,0.74481908914,-0.413695357707, -0.779461837472,0.779461837472,-0.448854226389, -0.779461837472,0.814104585804,-0.484040162897, -0.779461837472,0.848747334136,-0.519263962465, -0.779461837472,0.883390082469,-0.554532712829, -0.779461837472,0.918032830801,-0.589832176694, -0.779461837472,0.952675579133,-0.625154754216, -0.779461837472,0.987318327465,-0.660517040615, -0.779461837472,1.0219610758,-0.695909092358, -0.779461837472,1.05660382413,-0.731334351904, -0.779461837472,1.09124657246,-0.766787022118, -0.779461837472,1.12588932079,-0.802267640121, -0.779461837472,1.16053206913,-0.837774060392, -0.779461837472,1.19517481746,-0.873309623924, -0.779461837472,1.22981756579,-0.908875501938, -0.779461837472,1.26446031412,-0.944460243788, -0.779461837472,1.29910306245,-0.980066792556, -0.779461837472,1.33374581079,-1.01571082137, -0.779461837472,1.36838855912,-1.05136241058, -0.779461837472,1.40303130745,-1.0870470762, -0.779461837472,1.43767405578,-1.1227511587, -0.779461837472,1.47231680411,-1.15847634848, -0.779461837472,1.50695955245,-1.1942196305, -0.779461837472,1.54160230078,-1.22998623645, -0.779461837472,1.57624504911,-1.26577271561, -0.779461837472,1.61088779744,-1.30157279922, -0.779461837472,1.64553054577,-1.33739821161, -0.779461837472,1.68017329411,-1.37323669047, -0.779461837472,1.71481604244,-1.40909853449, -0.814104585804,-1.71481604244,1.65001031467, -0.814104585804,-1.68017329411,1.63764761178, -0.814104585804,-1.64553054577,1.62252684826, -0.814104585804,-1.61088779744,1.60520487006, -0.814104585804,-1.57624504911,1.58609223702, -0.814104585804,-1.54160230078,1.56544564419, -0.814104585804,-1.50695955245,1.54355125817, -0.814104585804,-1.47231680411,1.52054306597, -0.814104585804,-1.43767405578,1.49661399768, -0.814104585804,-1.40303130745,1.47180098663, -0.814104585804,-1.36838855912,1.44629053231, -0.814104585804,-1.33374581079,1.43833572567, -0.814104585804,-1.29910306245,1.43370654712, -0.814104585804,-1.26446031412,1.42414574054, -0.814104585804,-1.22981756579,1.41080540958, -0.814104585804,-1.19517481746,1.39443497124, -0.814104585804,-1.16053206913,1.3756024189, -0.814104585804,-1.12588932079,1.35473765427, -0.814104585804,-1.09124657246,1.32825581263, -0.814104585804,-1.05660382413,1.29933878511, -0.814104585804,-1.0219610758,1.27014989809, -0.814104585804,-0.987318327465,1.24069046179, -0.814104585804,-0.952675579133,1.21098401884, -0.814104585804,-0.918032830801,1.181050642, -0.814104585804,-0.883390082469,1.15090366096, -0.814104585804,-0.848747334136,1.12054939078, -0.814104585804,-0.814104585804,1.09000368693, -0.814104585804,-0.779461837472,1.05926681229, -0.814104585804,-0.74481908914,1.0283646302, -0.814104585804,-0.710176340808,0.997302451745, -0.814104585804,-0.675533592476,0.966073665494, -0.814104585804,-0.640890844144,0.934685551155, -0.814104585804,-0.606248095812,0.90315496447, -0.814104585804,-0.57160534748,0.871490894893, -0.814104585804,-0.536962599148,0.839685824552, -0.814104585804,-0.502319850815,0.80775735277, -0.814104585804,-0.467677102483,0.775688697837, -0.814104585804,-0.433034354151,0.743501468769, -0.814104585804,-0.398391605819,0.711194411767, -0.814104585804,-0.363748857487,0.678764953772, -0.814104585804,-0.329106109155,0.646224261381, -0.814104585804,-0.294463360823,0.613570480255, -0.814104585804,-0.259820612491,0.58081072939, -0.814104585804,-0.225177864159,0.547934340058, -0.814104585804,-0.190535115827,0.514961881679, -0.814104585804,-0.155892367494,0.48188071483, -0.814104585804,-0.121249619162,0.448692431007, -0.814104585804,-0.0866068708302,0.415406200829, -0.814104585804,-0.0519641224981,0.382027684882, -0.814104585804,-0.017321374166,0.348546185411, -0.814104585804,0.017321374166,0.314970466233, -0.814104585804,0.0519641224981,0.282363509803, -0.814104585804,0.0866068708302,0.249552039193, -0.814104585804,0.121249619162,0.216278599256, -0.814104585804,0.155892367494,0.182113014022, -0.814104585804,0.190535115827,0.147872539552, -0.814104585804,0.225177864159,0.113560004187, -0.814104585804,0.259820612491,0.0791855914816, -0.814104585804,0.294463360823,0.0447369115681, -0.814104585804,0.329106109155,0.0102317766847, -0.814104585804,0.363748857487,-0.024336395646, -0.814104585804,0.398391605819,-0.0589610041671, -0.814104585804,0.433034354151,-0.0936478465085, -0.814104585804,0.467677102483,-0.128388298216, -0.814104585804,0.502319850815,-0.163182046673, -0.814104585804,0.536962599148,-0.198025295494, -0.814104585804,0.57160534748,-0.232919749017, -0.814104585804,0.606248095812,-0.267859140985, -0.814104585804,0.640890844144,-0.302845704797, -0.814104585804,0.675533592476,-0.337872845132, -0.814104585804,0.710176340808,-0.372948466112, -0.814104585804,0.74481908914,-0.408058717837, -0.814104585804,0.779461837472,-0.443207979695, -0.814104585804,0.814104585804,-0.478406648104, -0.814104585804,0.848747334136,-0.513628799662, -0.814104585804,0.883390082469,-0.548895528997, -0.814104585804,0.918032830801,-0.584192044632, -0.814104585804,0.952675579133,-0.619520596407, -0.814104585804,0.987318327465,-0.654882884163, -0.814104585804,1.0219610758,-0.690279579019, -0.814104585804,1.05660382413,-0.7257042675, -0.814104585804,1.09124657246,-0.761157635069, -0.814104585804,1.12588932079,-0.796639058055, -0.814104585804,1.16053206913,-0.832151350396, -0.814104585804,1.19517481746,-0.867684219937, -0.814104585804,1.22981756579,-0.903247373449, -0.814104585804,1.26446031412,-0.938833239011, -0.814104585804,1.29910306245,-0.974445746362, -0.814104585804,1.33374581079,-1.01007878857, -0.814104585804,1.36838855912,-1.04574267877, -0.814104585804,1.40303130745,-1.08142708578, -0.814104585804,1.43767405578,-1.11713158154, -0.814104585804,1.47231680411,-1.1528580675, -0.814104585804,1.50695955245,-1.18860423274, -0.814104585804,1.54160230078,-1.22437075812, -0.814104585804,1.57624504911,-1.26015879037, -0.814104585804,1.61088779744,-1.2959602242, -0.814104585804,1.64553054577,-1.3317900916, -0.814104585804,1.68017329411,-1.36762461267, -0.814104585804,1.71481604244,-1.40349068997, -0.848747334136,-1.71481604244,1.65509828328, -0.848747334136,-1.68017329411,1.64268720926, -0.848747334136,-1.64553054577,1.62756592656, -0.848747334136,-1.61088779744,1.61024576168, -0.848747334136,-1.57624504911,1.59113552704, -0.848747334136,-1.54160230078,1.57053794259, -0.848747334136,-1.50695955245,1.54859833455, -0.848747334136,-1.47231680411,1.52563901534, -0.848747334136,-1.43767405578,1.50167193731, -0.848747334136,-1.40303130745,1.47690058988, -0.848747334136,-1.36838855912,1.45134350762, -0.848747334136,-1.33374581079,1.44384367576, -0.848747334136,-1.29910306245,1.43922206095, -0.848747334136,-1.26446031412,1.42965908862, -0.848747334136,-1.22981756579,1.41632088236, -0.848747334136,-1.19517481746,1.39994794785, -0.848747334136,-1.16053206913,1.38110629104, -0.848747334136,-1.12588932079,1.3602580586, -0.848747334136,-1.09124657246,1.33357249632, -0.848747334136,-1.05660382413,1.30465840045, -0.848747334136,-1.0219610758,1.27547025492, -0.848747334136,-0.987318327465,1.24602162784, -0.848747334136,-0.952675579133,1.21632103524, -0.848747334136,-0.918032830801,1.18639321773, -0.848747334136,-0.883390082469,1.1562515124, -0.848747334136,-0.848747334136,1.1259043219, -0.848747334136,-0.814104585804,1.09536837416, -0.848747334136,-0.779461837472,1.06464852449, -0.848747334136,-0.74481908914,1.03374955793, -0.848747334136,-0.710176340808,1.00268958477, -0.848747334136,-0.675533592476,0.97146615815, -0.848747334136,-0.640890844144,0.940090007818, -0.848747334136,-0.606248095812,0.90856832675, -0.848747334136,-0.57160534748,0.876916975547, -0.848747334136,-0.536962599148,0.845121946495, -0.848747334136,-0.502319850815,0.813184943688, -0.848747334136,-0.467677102483,0.781131955603, -0.848747334136,-0.433034354151,0.748951010682, -0.848747334136,-0.398391605819,0.716651118901, -0.848747334136,-0.363748857487,0.684227525135, -0.848747334136,-0.329106109155,0.651691281132, -0.848747334136,-0.294463360823,0.619046663992, -0.848747334136,-0.259820612491,0.586290003804, -0.848747334136,-0.225177864159,0.55342092072, -0.848747334136,-0.190535115827,0.520457626761, -0.848747334136,-0.155892367494,0.487379466368, -0.848747334136,-0.121249619162,0.454201316643, -0.848747334136,-0.0866068708302,0.420925981705, -0.848747334136,-0.0519641224981,0.387542367553, -0.848747334136,-0.017321374166,0.35405999645, -0.848747334136,0.017321374166,0.320494754482, -0.848747334136,0.0519641224981,0.287875340496, -0.848747334136,0.0866068708302,0.255063155642, -0.848747334136,0.121249619162,0.221837770153, -0.848747334136,0.155892367494,0.187673010377, -0.848747334136,0.190535115827,0.153432605802, -0.848747334136,0.225177864159,0.119123311834, -0.848747334136,0.259820612491,0.0847496359004, -0.848747334136,0.294463360823,0.0503074376756, -0.848747334136,0.329106109155,0.0157941319309, -0.848747334136,0.363748857487,-0.0187714838767, -0.848747334136,0.398391605819,-0.0533950364347, -0.848747334136,0.433034354151,-0.0880803226495, -0.848747334136,0.467677102483,-0.122821599733, -0.848747334136,0.502319850815,-0.157616229496, -0.848747334136,0.536962599148,-0.192462257712, -0.848747334136,0.57160534748,-0.227355168351, -0.848747334136,0.606248095812,-0.2622952893, -0.848747334136,0.640890844144,-0.297281466189, -0.848747334136,0.675533592476,-0.332312749496, -0.848747334136,0.710176340808,-0.367382088991, -0.848747334136,0.74481908914,-0.402500341861, -0.848747334136,0.779461837472,-0.437652940234, -0.848747334136,0.814104585804,-0.47284145021, -0.848747334136,0.848747334136,-0.508071086856, -0.848747334136,0.883390082469,-0.543336529295, -0.848747334136,0.918032830801,-0.578633812333, -0.848747334136,0.952675579133,-0.613962972626, -0.848747334136,0.987318327465,-0.649328365455, -0.848747334136,1.0219610758,-0.684724543162, -0.848747334136,1.05660382413,-0.720148094353, -0.848747334136,1.09124657246,-0.755604114452, -0.848747334136,1.12588932079,-0.791086855394, -0.848747334136,1.16053206913,-0.826596232729, -0.848747334136,1.19517481746,-0.862139078005, -0.848747334136,1.22981756579,-0.897702991086, -0.848747334136,1.26446031412,-0.933286993605, -0.848747334136,1.29910306245,-0.968903593705, -0.848747334136,1.33374581079,-1.00454116624, -0.848747334136,1.36838855912,-1.04020558148, -0.848747334136,1.40303130745,-1.07588469919, -0.848747334136,1.43767405578,-1.1115900451, -0.848747334136,1.47231680411,-1.14731528369, -0.848747334136,1.50695955245,-1.18306347183, -0.848747334136,1.54160230078,-1.21883175962, -0.848747334136,1.57624504911,-1.25462169569, -0.848747334136,1.61088779744,-1.29042779358, -0.848747334136,1.64553054577,-1.32624814812, -0.848747334136,1.68017329411,-1.36209625282, -0.848747334136,1.71481604244,-1.39795328869, -0.883390082469,-1.71481604244,1.66006169299, -0.883390082469,-1.68017329411,1.64770099471, -0.883390082469,-1.64553054577,1.63258019065, -0.883390082469,-1.61088779744,1.61525982944, -0.883390082469,-1.57624504911,1.59614965748, -0.883390082469,-1.54160230078,1.57550977331, -0.883390082469,-1.50695955245,1.55361866482, -0.883390082469,-1.47231680411,1.53061538618, -0.883390082469,-1.43767405578,1.50669132561, -0.883390082469,-1.40303130745,1.48188189571, -0.883390082469,-1.36838855912,1.45636651131, -0.883390082469,-1.33374581079,1.44928611396, -0.883390082469,-1.29910306245,1.44465711332, -0.883390082469,-1.26446031412,1.43510385315, -0.883390082469,-1.22981756579,1.42176373993, -0.883390082469,-1.19517481746,1.40538466479, -0.883390082469,-1.16053206913,1.38655208812, -0.883390082469,-1.12588932079,1.36569266745, -0.883390082469,-1.09124657246,1.33882243239, -0.883390082469,-1.05660382413,1.30990577226, -0.883390082469,-1.0219610758,1.28072820172, -0.883390082469,-0.987318327465,1.25127793174, -0.883390082469,-0.952675579133,1.22159262802, -0.883390082469,-0.918032830801,1.19167288377, -0.883390082469,-0.883390082469,1.16153483161, -0.883390082469,-0.848747334136,1.13119843112, -0.883390082469,-0.814104585804,1.10066188172, -0.883390082469,-0.779461837472,1.06994313545, -0.883390082469,-0.74481908914,1.03905578805, -0.883390082469,-0.710176340808,1.00800087659, -0.883390082469,-0.675533592476,0.976793119659, -0.883390082469,-0.640890844144,0.945421489843, -0.883390082469,-0.606248095812,0.913908343417, -0.883390082469,-0.57160534748,0.882254172769, -0.883390082469,-0.536962599148,0.850462220224, -0.883390082469,-0.502319850815,0.818542978795, -0.883390082469,-0.467677102483,0.78649820716, -0.883390082469,-0.433034354151,0.75432457696, -0.883390082469,-0.398391605819,0.722034303613, -0.883390082469,-0.363748857487,0.689618126111, -0.883390082469,-0.329106109155,0.657090538865, -0.883390082469,-0.294463360823,0.624449105269, -0.883390082469,-0.259820612491,0.591702189062, -0.883390082469,-0.225177864159,0.55884064597, -0.883390082469,-0.190535115827,0.525876899808, -0.883390082469,-0.155892367494,0.492804769593, -0.883390082469,-0.121249619162,0.459627853314, -0.883390082469,-0.0866068708302,0.426361697855, -0.883390082469,-0.0519641224981,0.392984389933, -0.883390082469,-0.017321374166,0.35951436403, -0.883390082469,0.017321374166,0.325948078691, -0.883390082469,0.0519641224981,0.293313261389, -0.883390082469,0.0866068708302,0.260501760357, -0.883390082469,0.121249619162,0.227321659414, -0.883390082469,0.155892367494,0.193159299102, -0.883390082469,0.190535115827,0.158918738881, -0.883390082469,0.225177864159,0.124615219471, -0.883390082469,0.259820612491,0.0902369070983, -0.883390082469,0.294463360823,0.0557909283487, -0.883390082469,0.329106109155,0.0212905503719, -0.883390082469,0.363748857487,-0.0132790571441, -0.883390082469,0.398391605819,-0.0479132411075, -0.883390082469,0.433034354151,-0.0826003285072, -0.883390082469,0.467677102483,-0.11733093705, -0.883390082469,0.502319850815,-0.152127895483, -0.883390082469,0.536962599148,-0.186970889655, -0.883390082469,0.57160534748,-0.221866165645, -0.883390082469,0.606248095812,-0.256807703467, -0.883390082469,0.640890844144,-0.291792784475, -0.883390082469,0.675533592476,-0.32682442822, -0.883390082469,0.710176340808,-0.361897642298, -0.883390082469,0.74481908914,-0.397010839239, -0.883390082469,0.779461837472,-0.43216873616, -0.883390082469,0.814104585804,-0.467353409242, -0.883390082469,0.848747334136,-0.502588718328, -0.883390082469,0.883390082469,-0.537853551422, -0.883390082469,0.918032830801,-0.573155023285, -0.883390082469,0.952675579133,-0.608481898493, -0.883390082469,0.987318327465,-0.643846323439, -0.883390082469,1.0219610758,-0.67924211076, -0.883390082469,1.05660382413,-0.714667463885, -0.883390082469,1.09124657246,-0.750124474968, -0.883390082469,1.12588932079,-0.78560900493, -0.883390082469,1.16053206913,-0.821119073081, -0.883390082469,1.19517481746,-0.85665791943, -0.883390082469,1.22981756579,-0.892223128429, -0.883390082469,1.26446031412,-0.92781912876, -0.883390082469,1.29910306245,-0.963426299091, -0.883390082469,1.33374581079,-0.999066357599, -0.883390082469,1.36838855912,-1.03473181048, -0.883390082469,1.40303130745,-1.07041778216, -0.883390082469,1.43767405578,-1.10612199471, -0.883390082469,1.47231680411,-1.14184887367, -0.883390082469,1.50695955245,-1.1775988384, -0.883390082469,1.54160230078,-1.21336719153, -0.883390082469,1.57624504911,-1.24915452331, -0.883390082469,1.61088779744,-1.28496740066, -0.883390082469,1.64553054577,-1.32079177198, -0.883390082469,1.68017329411,-1.35664077594, -0.883390082469,1.71481604244,-1.39250433959, -0.918032830801,-1.71481604244,1.66503928254, -0.918032830801,-1.68017329411,1.65263200716, -0.918032830801,-1.64553054577,1.63751778562, -0.918032830801,-1.61088779744,1.62020119212, -0.918032830801,-1.57624504911,1.60109206266, -0.918032830801,-1.54160230078,1.58045075935, -0.918032830801,-1.50695955245,1.55856444746, -0.918032830801,-1.47231680411,1.53556159144, -0.918032830801,-1.43767405578,1.51159534485, -0.918032830801,-1.40303130745,1.48683034983, -0.918032830801,-1.36838855912,1.46132095735, -0.918032830801,-1.33374581079,1.45464873064, -0.918032830801,-1.29910306245,1.45002215544, -0.918032830801,-1.26446031412,1.44046482845, -0.918032830801,-1.22981756579,1.42712689239, -0.918032830801,-1.19517481746,1.4107569534, -0.918032830801,-1.16053206913,1.39191926082, -0.918032830801,-1.12588932079,1.37106793609, -0.918032830801,-1.09124657246,1.34398027894, -0.918032830801,-1.05660382413,1.31509845223, -0.918032830801,-1.0219610758,1.28590706756, -0.918032830801,-0.987318327465,1.25647194923, -0.918032830801,-0.952675579133,1.22679067266, -0.918032830801,-0.918032830801,1.19687700824, -0.918032830801,-0.883390082469,1.16675179157, -0.918032830801,-0.848747334136,1.13641407899, -0.918032830801,-0.814104585804,1.10589046138, -0.918032830801,-0.779461837472,1.07518417296, -0.918032830801,-0.74481908914,1.04430348961, -0.918032830801,-0.710176340808,1.01325232383, -0.918032830801,-0.675533592476,0.982047951469, -0.918032830801,-0.640890844144,0.950681988266, -0.918032830801,-0.606248095812,0.91918797417, -0.918032830801,-0.57160534748,0.887544077187, -0.918032830801,-0.536962599148,0.855755281629, -0.918032830801,-0.502319850815,0.823833162486, -0.918032830801,-0.467677102483,0.791797926073, -0.918032830801,-0.433034354151,0.759633966717, -0.918032830801,-0.398391605819,0.727345947702, -0.918032830801,-0.363748857487,0.694935303092, -0.918032830801,-0.329106109155,0.662415788712, -0.918032830801,-0.294463360823,0.62977978337, -0.918032830801,-0.259820612491,0.597038017242, -0.918032830801,-0.225177864159,0.564182334809, -0.918032830801,-0.190535115827,0.531221873304, -0.918032830801,-0.155892367494,0.498158557749, -0.918032830801,-0.121249619162,0.46499523155, -0.918032830801,-0.0866068708302,0.431728211874, -0.918032830801,-0.0519641224981,0.398355606907, -0.918032830801,-0.017321374166,0.364893254478, -0.918032830801,0.017321374166,0.331322207611, -0.918032830801,0.0519641224981,0.298679228305, -0.918032830801,0.0866068708302,0.265866954082, -0.918032830801,0.121249619162,0.232732281332, -0.918032830801,0.155892367494,0.19856994196, -0.918032830801,0.190535115827,0.164332845574, -0.918032830801,0.225177864159,0.13002669677, -0.918032830801,0.259820612491,0.0956495321367, -0.918032830801,0.294463360823,0.0612129218951, -0.918032830801,0.329106109155,0.0267044368338, -0.918032830801,0.363748857487,-0.00786792257453, -0.918032830801,0.398391605819,-0.0424877734745, -0.918032830801,0.433034354151,-0.077175065925, -0.918032830801,0.467677102483,-0.111914244165, -0.918032830801,0.502319850815,-0.146710660809, -0.918032830801,0.536962599148,-0.181554457162, -0.918032830801,0.57160534748,-0.216447745077, -0.918032830801,0.606248095812,-0.251390775076, -0.918032830801,0.640890844144,-0.286377628941, -0.918032830801,0.675533592476,-0.321411118841, -0.918032830801,0.710176340808,-0.356480768117, -0.918032830801,0.74481908914,-0.391595732289, -0.918032830801,0.779461837472,-0.42675370009, -0.918032830801,0.814104585804,-0.461940369006, -0.918032830801,0.848747334136,-0.497179673302, -0.918032830801,0.883390082469,-0.532444522437, -0.918032830801,0.918032830801,-0.567736572269, -0.918032830801,0.952675579133,-0.603077253187, -0.918032830801,0.987318327465,-0.638439711194, -0.918032830801,1.0219610758,-0.673836131598, -0.918032830801,1.05660382413,-0.70926370654, -0.918032830801,1.09124657246,-0.744720819148, -0.918032830801,1.12588932079,-0.780203558394, -0.918032830801,1.16053206913,-0.815717641726, -0.918032830801,1.19517481746,-0.851259963172, -0.918032830801,1.22981756579,-0.886822777725, -0.918032830801,1.26446031412,-0.922417733825, -0.918032830801,1.29910306245,-0.958035630509, -0.918032830801,1.33374581079,-0.99366700552, -0.918032830801,1.36838855912,-1.02933660184, -0.918032830801,1.40303130745,-1.06501065632, -0.918032830801,1.43767405578,-1.10072786151, -0.918032830801,1.47231680411,-1.13645672001, -0.918032830801,1.50695955245,-1.17220492825, -0.918032830801,1.54160230078,-1.20797508547, -0.918032830801,1.57624504911,-1.24376506263, -0.918032830801,1.61088779744,-1.27957725842, -0.918032830801,1.64553054577,-1.31540473118, -0.918032830801,1.68017329411,-1.35124833395, -0.918032830801,1.71481604244,-1.38711216157, -0.952675579133,-1.71481604244,1.66990569566, -0.952675579133,-1.68017329411,1.65754639885, -0.952675579133,-1.64553054577,1.6424307624, -0.952675579133,-1.61088779744,1.62506540971, -0.952675579133,-1.57624504911,1.6059649689, -0.952675579133,-1.54160230078,1.58532337195, -0.952675579133,-1.50695955245,1.56343810557, -0.952675579133,-1.47231680411,1.54043602298, -0.952675579133,-1.43767405578,1.51646988074, -0.952675579133,-1.40303130745,1.49170642188, -0.952675579133,-1.36838855912,1.46620146617, -0.952675579133,-1.33374581079,1.45994161338, -0.952675579133,-1.29910306245,1.45531891909, -0.952675579133,-1.26446031412,1.44576926855, -0.952675579133,-1.22981756579,1.43242152355, -0.952675579133,-1.19517481746,1.41604722672, -0.952675579133,-1.16053206913,1.39722055825, -0.952675579133,-1.12588932079,1.37636180257, -0.952675579133,-1.09124657246,1.34908900651, -0.952675579133,-1.05660382413,1.32020691103, -0.952675579133,-1.0219610758,1.29102692839, -0.952675579133,-0.987318327465,1.26159489399, -0.952675579133,-0.952675579133,1.23191966723, -0.952675579133,-0.918032830801,1.20201874473, -0.952675579133,-0.883390082469,1.17189140551, -0.952675579133,-0.848747334136,1.14156474059, -0.952675579133,-0.814104585804,1.11104710107, -0.952675579133,-0.779461837472,1.08034754218, -0.952675579133,-0.74481908914,1.04947062123, -0.952675579133,-0.710176340808,1.0184315899, -0.952675579133,-0.675533592476,0.987232653668, -0.952675579133,-0.640890844144,0.955882548283, -0.952675579133,-0.606248095812,0.924386971802, -0.952675579133,-0.57160534748,0.892749369207, -0.952675579133,-0.536962599148,0.860972040127, -0.952675579133,-0.502319850815,0.829057139499, -0.952675579133,-0.467677102483,0.797026648167, -0.952675579133,-0.433034354151,0.764866465643, -0.952675579133,-0.398391605819,0.732585204721, -0.952675579133,-0.363748857487,0.700184319378, -0.952675579133,-0.329106109155,0.667669106042, -0.952675579133,-0.294463360823,0.635040598217, -0.952675579133,-0.259820612491,0.602304957269, -0.952675579133,-0.225177864159,0.569454497414, -0.952675579133,-0.190535115827,0.536501854611, -0.952675579133,-0.155892367494,0.503442688862, -0.952675579133,-0.121249619162,0.470284312125, -0.952675579133,-0.0866068708302,0.437015385367, -0.952675579133,-0.0519641224981,0.403657804611, -0.952675579133,-0.017321374166,0.370198803449, -0.952675579133,0.017321374166,0.336640874866, -0.952675579133,0.0519641224981,0.303975120452, -0.952675579133,0.0866068708302,0.27116072801, -0.952675579133,0.121249619162,0.238036919662, -0.952675579133,0.155892367494,0.2039107842, -0.952675579133,0.190535115827,0.169676761177, -0.952675579133,0.225177864159,0.13537068305, -0.952675579133,0.259820612491,0.100995742492, -0.952675579133,0.294463360823,0.0665524160981, -0.952675579133,0.329106109155,0.0320471370542, -0.952675579133,0.363748857487,-0.00251489103028, -0.952675579133,0.398391605819,-0.0371424996933, -0.952675579133,0.433034354151,-0.071833091392, -0.952675579133,0.467677102483,-0.106569538791, -0.952675579133,0.502319850815,-0.141364811396, -0.952675579133,0.536962599148,-0.176210903294, -0.952675579133,0.57160534748,-0.211103960437, -0.952675579133,0.606248095812,-0.246046206815, -0.952675579133,0.640890844144,-0.281034049894, -0.952675579133,0.675533592476,-0.316065911115, -0.952675579133,0.710176340808,-0.351141495015, -0.952675579133,0.74481908914,-0.386253004309, -0.952675579133,0.779461837472,-0.421414362382, -0.952675579133,0.814104585804,-0.456600264135, -0.952675579133,0.848747334136,-0.491830484367, -0.952675579133,0.883390082469,-0.527107453865, -0.952675579133,0.918032830801,-0.562393853347, -0.952675579133,0.952675579133,-0.59774102288, -0.952675579133,0.987318327465,-0.633101796503, -0.952675579133,1.0219610758,-0.668498911469, -0.952675579133,1.05660382413,-0.703928041585, -0.952675579133,1.09124657246,-0.739387088584, -0.952675579133,1.12588932079,-0.774873297973, -0.952675579133,1.16053206913,-0.810384258998, -0.952675579133,1.19517481746,-0.845929279574, -0.952675579133,1.22981756579,-0.88149163755, -0.952675579133,1.26446031412,-0.917081387114, -0.952675579133,1.29910306245,-0.952706224857, -0.952675579133,1.33374581079,-0.98834099596, -0.952675579133,1.36838855912,-1.02400169114, -0.952675579133,1.40303130745,-1.05968707756, -0.952675579133,1.43767405578,-1.09540338216, -0.952675579133,1.47231680411,-1.13113409541, -0.952675579133,1.50695955245,-1.16688320351, -0.952675579133,1.54160230078,-1.20265738938, -0.952675579133,1.57624504911,-1.23844643626, -0.952675579133,1.61088779744,-1.27425564288, -0.952675579133,1.64553054577,-1.31008536861, -0.952675579133,1.68017329411,-1.34593332473, -0.952675579133,1.71481604244,-1.38180393348, -0.987318327465,-1.71481604244,1.67470023326, -0.987318327465,-1.68017329411,1.66234448862, -0.987318327465,-1.64553054577,1.64722750344, -0.987318327465,-1.61088779744,1.6299110524, -0.987318327465,-1.57624504911,1.61075965263, -0.987318327465,-1.54160230078,1.5901736638, -0.987318327465,-1.50695955245,1.56824194055, -0.987318327465,-1.47231680411,1.54524095731, -0.987318327465,-1.43767405578,1.52132550349, -0.987318327465,-1.40303130745,1.49651877913, -0.987318327465,-1.36838855912,1.47101046097, -0.987318327465,-1.33374581079,1.46517395706, -0.987318327465,-1.29910306245,1.46054907456, -0.987318327465,-1.26446031412,1.45099410758, -0.987318327465,-1.22981756579,1.43765781238, -0.987318327465,-1.19517481746,1.42127660146, -0.987318327465,-1.16053206913,1.40244736715, -0.987318327465,-1.12588932079,1.38158812131, -0.987318327465,-1.09124657246,1.35412343798, -0.987318327465,-1.05660382413,1.3252489346, -0.987318327465,-1.0219610758,1.29608894519, -0.987318327465,-0.987318327465,1.26664880485, -0.987318327465,-0.952675579133,1.23698834881, -0.987318327465,-0.918032830801,1.20709154039, -0.987318327465,-0.883390082469,1.17696843958, -0.987318327465,-0.848747334136,1.14665911549, -0.987318327465,-0.814104585804,1.11614630845, -0.987318327465,-0.779461837472,1.08545019885, -0.987318327465,-0.74481908914,1.05457672877, -0.987318327465,-0.710176340808,1.02354074666, -0.987318327465,-0.675533592476,0.992349141831, -0.987318327465,-0.640890844144,0.961015408776, -0.987318327465,-0.606248095812,0.929518421604, -0.987318327465,-0.57160534748,0.897885181166, -0.987318327465,-0.536962599148,0.866114840604, -0.987318327465,-0.502319850815,0.834216497542, -0.987318327465,-0.467677102483,0.802199960569, -0.987318327465,-0.433034354151,0.770035873009, -0.987318327465,-0.398391605819,0.737762145266, -0.987318327465,-0.363748857487,0.705366883815, -0.987318327465,-0.329106109155,0.672859856956, -0.987318327465,-0.294463360823,0.640237708315, -0.987318327465,-0.259820612491,0.607504754912, -0.987318327465,-0.225177864159,0.574664910803, -0.987318327465,-0.190535115827,0.54171828385, -0.987318327465,-0.155892367494,0.508658949582, -0.987318327465,-0.121249619162,0.475507293244, -0.987318327465,-0.0866068708302,0.442248744964, -0.987318327465,-0.0519641224981,0.408892703715, -0.987318327465,-0.017321374166,0.375433054606, -0.987318327465,0.017321374166,0.341880220105, -0.987318327465,0.0519641224981,0.309200526564, -0.987318327465,0.0866068708302,0.27639020694, -0.987318327465,0.121249619162,0.243264646097, -0.987318327465,0.155892367494,0.209183566543, -0.987318327465,0.190535115827,0.174947952786, -0.987318327465,0.225177864159,0.14064364733, -0.987318327465,0.259820612491,0.106270982095, -0.987318327465,0.294463360823,0.0718264205347, -0.987318327465,0.329106109155,0.0373289728123, -0.987318327465,0.363748857487,0.00276076925269, -0.987318327465,0.398391605819,-0.0318748931444, -0.987318327465,0.433034354151,-0.0665574887211, -0.987318327465,0.467677102483,-0.10129491786, -0.987318327465,0.502319850815,-0.136096467173, -0.987318327465,0.536962599148,-0.170933520309, -0.987318327465,0.57160534748,-0.205827081245, -0.987318327465,0.606248095812,-0.240772067144, -0.987318327465,0.640890844144,-0.275760174395, -0.987318327465,0.675533592476,-0.310791917784, -0.987318327465,0.710176340808,-0.345866265352, -0.987318327465,0.74481908914,-0.380980720511, -0.987318327465,0.779461837472,-0.416140596948, -0.987318327465,0.814104585804,-0.451331114975, -0.987318327465,0.848747334136,-0.486562637127, -0.987318327465,0.883390082469,-0.521827072029, -0.987318327465,0.918032830801,-0.557124676825, -0.987318327465,0.952675579133,-0.5924658868, -0.987318327465,0.987318327465,-0.627835428115, -0.987318327465,1.0219610758,-0.66323415378, -0.987318327465,1.05660382413,-0.698662049605, -0.987318327465,1.09124657246,-0.734121525852, -0.987318327465,1.12588932079,-0.76960699108, -0.987318327465,1.16053206913,-0.805122714107, -0.987318327465,1.19517481746,-0.840664309329, -0.987318327465,1.22981756579,-0.876235677108, -0.987318327465,1.26446031412,-0.911826999242, -0.987318327465,1.29910306245,-0.947447881849, -0.987318327465,1.33374581079,-0.983086304701, -0.987318327465,1.36838855912,-1.0187570529, -0.987318327465,1.40303130745,-1.05444424627, -0.987318327465,1.43767405578,-1.09014901481, -0.987318327465,1.47231680411,-1.12587926125, -0.987318327465,1.50695955245,-1.1616317235, -0.987318327465,1.54160230078,-1.19740450758, -0.987318327465,1.57624504911,-1.23319680274, -0.987318327465,1.61088779744,-1.26900621608, -0.987318327465,1.64553054577,-1.30483843772, -0.987318327465,1.68017329411,-1.34068581953, -0.987318327465,1.71481604244,-1.37655870718, -1.0219610758,-1.71481604244,1.67947674413, -1.0219610758,-1.68017329411,1.66707272626, -1.0219610758,-1.64553054577,1.6519576332, -1.0219610758,-1.61088779744,1.63464358707, -1.0219610758,-1.57624504911,1.61553890469, -1.0219610758,-1.54160230078,1.5949028164, -1.0219610758,-1.50695955245,1.57302168272, -1.0219610758,-1.47231680411,1.5500273313, -1.0219610758,-1.43767405578,1.52606206888, -1.0219610758,-1.40303130745,1.50125677898, -1.0219610758,-1.36838855912,1.47575727659, -1.0219610758,-1.33374581079,1.4703324699, -1.0219610758,-1.29910306245,1.46571423333, -1.0219610758,-1.26446031412,1.45615742544, -1.0219610758,-1.22981756579,1.44282019933, -1.0219610758,-1.19517481746,1.42644626475, -1.0219610758,-1.16053206913,1.40761173303, -1.0219610758,-1.12588932079,1.38675948801, -1.0219610758,-1.09124657246,1.35911092568, -1.0219610758,-1.05660382413,1.33022629459, -1.0219610758,-1.0219610758,1.30107760512, -1.0219610758,-0.987318327465,1.27165680411, -1.0219610758,-0.952675579133,1.24198911162, -1.0219610758,-0.918032830801,1.21209732148, -1.0219610758,-0.883390082469,1.18198735144, -1.0219610758,-0.848747334136,1.15167384554, -1.0219610758,-0.814104585804,1.12117297932, -1.0219610758,-0.779461837472,1.09048403812, -1.0219610758,-0.74481908914,1.05962313396, -1.0219610758,-0.710176340808,1.02859454037, -1.0219610758,-0.675533592476,0.99741414004, -1.0219610758,-0.640890844144,0.966073665494, -1.0219610758,-0.606248095812,0.934584097462, -1.0219610758,-0.57160534748,0.902965285262, -1.0219610758,-0.536962599148,0.871199789024, -1.0219610758,-0.502319850815,0.839312769796, -1.0219610758,-0.467677102483,0.807282582725, -1.0219610758,-0.433034354151,0.775139144007, -1.0219610758,-0.398391605819,0.742872891274, -1.0219610758,-0.363748857487,0.710481577664, -1.0219610758,-0.329106109155,0.677982197359, -1.0219610758,-0.294463360823,0.645368317045, -1.0219610758,-0.259820612491,0.612639090792, -1.0219610758,-0.225177864159,0.579803168465, -1.0219610758,-0.190535115827,0.546858822143, -1.0219610758,-0.155892367494,0.513817143288, -1.0219610758,-0.121249619162,0.480665755623, -1.0219610758,-0.0866068708302,0.447406511995, -1.0219610758,-0.0519641224981,0.414048739495, -1.0219610758,-0.017321374166,0.38059796495, -1.0219610758,0.017321374166,0.347042794254, -1.0219610758,0.0519641224981,0.314361675571, -1.0219610758,0.0866068708302,0.281549205315, -1.0219610758,0.121249619162,0.248423827681, -1.0219610758,0.155892367494,0.21438996685, -1.0219610758,0.190535115827,0.1801568323, -1.0219610758,0.225177864159,0.145852453467, -1.0219610758,0.259820612491,0.111477144947, -1.0219610758,0.294463360823,0.0770364188978, -1.0219610758,0.329106109155,0.042534547501, -1.0219610758,0.363748857487,0.00796143255262, -1.0219610758,0.398391605819,-0.0266593026274, -1.0219610758,0.433034354151,-0.061346709626, -1.0219610758,0.467677102483,-0.0960885533283, -1.0219610758,0.502319850815,-0.130879915298, -1.0219610758,0.536962599148,-0.165725392411, -1.0219610758,0.57160534748,-0.200621002826, -1.0219610758,0.606248095812,-0.235563244891, -1.0219610758,0.640890844144,-0.270550332052, -1.0219610758,0.675533592476,-0.305582625184, -1.0219610758,0.710176340808,-0.340659174165, -1.0219610758,0.74481908914,-0.375777023589, -1.0219610758,0.779461837472,-0.410930913653, -1.0219610758,0.814104585804,-0.446131022838, -1.0219610758,0.848747334136,-0.481362505748, -1.0219610758,0.883390082469,-0.516628612501, -1.0219610758,0.918032830801,-0.551926950012, -1.0219610758,0.952675579133,-0.58726914742, -1.0219610758,0.987318327465,-0.622636463112, -1.0219610758,1.0219610758,-0.658034609804, -1.0219610758,1.05660382413,-0.693463925072, -1.0219610758,1.09124657246,-0.72892614936, -1.0219610758,1.12588932079,-0.764412104017, -1.0219610758,1.16053206913,-0.799925767121, -1.0219610758,1.19517481746,-0.835469819851, -1.0219610758,1.22981756579,-0.871037706741, -1.0219610758,1.26446031412,-0.906634000348, -1.0219610758,1.29910306245,-0.942248055445, -1.0219610758,1.33374581079,-0.977900992228, -1.0219610758,1.36838855912,-1.01355399237, -1.0219610758,1.40303130745,-1.0492434722, -1.0219610758,1.43767405578,-1.08496076118, -1.0219610758,1.47231680411,-1.12069310482, -1.0219610758,1.50695955245,-1.15644556897, -1.0219610758,1.54160230078,-1.19221863205, -1.0219610758,1.57624504911,-1.22801439163, -1.0219610758,1.61088779744,-1.26382696851, -1.0219610758,1.64553054577,-1.29965571349, -1.0219610758,1.68017329411,-1.33550415711, -1.0219610758,1.71481604244,-1.3713751554, -1.05660382413,-1.71481604244,1.68413828121, -1.05660382413,-1.68017329411,1.67178417938, -1.05660382413,-1.64553054577,1.65666928557, -1.05660382413,-1.61088779744,1.63935608262, -1.05660382413,-1.57624504911,1.62020809184, -1.05660382413,-1.54160230078,1.59961965884, -1.05660382413,-1.50695955245,1.57768708299, -1.05660382413,-1.47231680411,1.55469855039, -1.05660382413,-1.43767405578,1.53073878023, -1.05660382413,-1.40303130745,1.50597750461, -1.05660382413,-1.36838855912,1.48042987103, -1.05660382413,-1.33374581079,1.47543345389, -1.05660382413,-1.29910306245,1.47080874315, -1.05660382413,-1.26446031412,1.46125296812, -1.05660382413,-1.22981756579,1.44791089739, -1.05660382413,-1.19517481746,1.43153988292, -1.05660382413,-1.16053206913,1.41270542468, -1.05660382413,-1.12588932079,1.39185543441, -1.05660382413,-1.09124657246,1.36402749232, -1.05660382413,-1.05660382413,1.33515476346, -1.05660382413,-1.0219610758,1.30601146532, -1.05660382413,-0.987318327465,1.27660044293, -1.05660382413,-0.952675579133,1.24693256549, -1.05660382413,-0.918032830801,1.21704549079, -1.05660382413,-0.883390082469,1.18693764519, -1.05660382413,-0.848747334136,1.15663203738, -1.05660382413,-0.814104585804,1.12613722642, -1.05660382413,-0.779461837472,1.09546018922, -1.05660382413,-0.74481908914,1.06460043202, -1.05660382413,-0.710176340808,1.03358147974, -1.05660382413,-0.675533592476,1.00239927086, -1.05660382413,-0.640890844144,0.971068142171, -1.05660382413,-0.606248095812,0.939595603274, -1.05660382413,-0.57160534748,0.907979072818, -1.05660382413,-0.536962599148,0.876214464813, -1.05660382413,-0.502319850815,0.844331600118, -1.05660382413,-0.467677102483,0.812315105785, -1.05660382413,-0.433034354151,0.78017797496, -1.05660382413,-0.398391605819,0.747919136559, -1.05660382413,-0.363748857487,0.715533202698, -1.05660382413,-0.329106109155,0.683037972286, -1.05660382413,-0.294463360823,0.650430001373, -1.05660382413,-0.259820612491,0.617709583567, -1.05660382413,-0.225177864159,0.584877069843, -1.05660382413,-0.190535115827,0.551945942611, -1.05660382413,-0.155892367494,0.518902555218, -1.05660382413,-0.121249619162,0.485751941634, -1.05660382413,-0.0866068708302,0.452501966898, -1.05660382413,-0.0519641224981,0.419154285635, -1.05660382413,-0.017321374166,0.385710617346, -1.05660382413,0.017321374166,0.35216691025, -1.05660382413,0.0519641224981,0.319457963925, -1.05660382413,0.0866068708302,0.286647123909, -1.05660382413,0.121249619162,0.25352212378, -1.05660382413,0.155892367494,0.219528151626, -1.05660382413,0.190535115827,0.185296540995, -1.05660382413,0.225177864159,0.15099371264, -1.05660382413,0.259820612491,0.116621782624, -1.05660382413,0.294463360823,0.0821770542317, -1.05660382413,0.329106109155,0.0476742681848, -1.05660382413,0.363748857487,0.0131084675958, -1.05660382413,0.398391605819,-0.0215178492533, -1.05660382413,0.433034354151,-0.0561992560945, -1.05660382413,0.467677102483,-0.0909486882575, -1.05660382413,0.502319850815,-0.125737367052, -1.05660382413,0.536962599148,-0.160582440228, -1.05660382413,0.57160534748,-0.195478434087, -1.05660382413,0.606248095812,-0.230421378684, -1.05660382413,0.640890844144,-0.265410629051, -1.05660382413,0.675533592476,-0.300445512822, -1.05660382413,0.710176340808,-0.335523806032, -1.05660382413,0.74481908914,-0.370640129595, -1.05660382413,0.779461837472,-0.405798949871, -1.05660382413,0.814104585804,-0.440989195102, -1.05660382413,0.848747334136,-0.476228367452, -1.05660382413,0.883390082469,-0.511496597847, -1.05660382413,0.918032830801,-0.54679867143, -1.05660382413,0.952675579133,-0.582130293468, -1.05660382413,0.987318327465,-0.617501058401, -1.05660382413,1.0219610758,-0.652901292511, -1.05660382413,1.05660382413,-0.688331932084, -1.05660382413,1.09124657246,-0.72379181139, -1.05660382413,1.12588932079,-0.759282323928, -1.05660382413,1.16053206913,-0.79479705927, -1.05660382413,1.19517481746,-0.830343878462, -1.05660382413,1.22981756579,-0.865911309411, -1.05660382413,1.26446031412,-0.901509822804, -1.05660382413,1.29910306245,-0.937126430181, -1.05660382413,1.33374581079,-0.97277084301, -1.05660382413,1.36838855912,-1.0084369173, -1.05660382413,1.40303130745,-1.0441200641, -1.05660382413,1.43767405578,-1.07983910077, -1.05660382413,1.47231680411,-1.11557132027, -1.05660382413,1.50695955245,-1.15132616127, -1.05660382413,1.54160230078,-1.18710163487, -1.05660382413,1.57624504911,-1.22289749992, -1.05660382413,1.61088779744,-1.25871091379, -1.05660382413,1.64553054577,-1.2945417564, -1.05660382413,1.68017329411,-1.33039394451, -1.05660382413,1.71481604244,-1.36626058973, -1.09124657246,-1.71481604244,1.68878116322, -1.09124657246,-1.68017329411,1.67642785331, -1.09124657246,-1.64553054577,1.66131618494, -1.09124657246,-1.61088779744,1.64400448562, -1.09124657246,-1.57624504911,1.62485647751, -1.09124657246,-1.54160230078,1.60422179455, -1.09124657246,-1.50695955245,1.58233904414, -1.09124657246,-1.47231680411,1.5593437646, -1.09124657246,-1.43767405578,1.53539392988, -1.09124657246,-1.40303130745,1.51059081435, -1.09124657246,-1.36838855912,1.48508455404, -1.09124657246,-1.33374581079,1.4804642369, -1.09124657246,-1.29910306245,1.47584166708, -1.09124657246,-1.26446031412,1.4662899283, -1.09124657246,-1.22981756579,1.45294776077, -1.09124657246,-1.19517481746,1.43657694804, -1.09124657246,-1.16053206913,1.41773984097, -1.09124657246,-1.12588932079,1.3968887166, -1.09124657246,-1.09124657246,1.36888724186, -1.09124657246,-1.05660382413,1.34002123317, -1.09124657246,-1.0219610758,1.31085984133, -1.09124657246,-0.987318327465,1.28146308909, -1.09124657246,-0.952675579133,1.25181355113, -1.09124657246,-0.918032830801,1.22193235464, -1.09124657246,-0.883390082469,1.19182988244, -1.09124657246,-0.848747334136,1.16153483161, -1.09124657246,-0.814104585804,1.13103675048, -1.09124657246,-0.779461837472,1.100361938, -1.09124657246,-0.74481908914,1.06952107058, -1.09124657246,-0.710176340808,1.03850949043, -1.09124657246,-0.675533592476,1.007335664, -1.09124657246,-0.640890844144,0.976008733924, -1.09124657246,-0.606248095812,0.94454419853, -1.09124657246,-0.57160534748,0.912928330806, -1.09124657246,-0.536962599148,0.881174143801, -1.09124657246,-0.502319850815,0.849306477766, -1.09124657246,-0.467677102483,0.817280039652, -1.09124657246,-0.433034354151,0.785156117421, -1.09124657246,-0.398391605819,0.752900023765, -1.09124657246,-0.363748857487,0.720526196508, -1.09124657246,-0.329106109155,0.688032374585, -1.09124657246,-0.294463360823,0.655428716549, -1.09124657246,-0.259820612491,0.622717792927, -1.09124657246,-0.225177864159,0.589893763809, -1.09124657246,-0.190535115827,0.556960830325, -1.09124657246,-0.155892367494,0.523925070744, -1.09124657246,-0.121249619162,0.490786122515, -1.09124657246,-0.0866068708302,0.457536535265, -1.09124657246,-0.0519641224981,0.424197320403, -1.09124657246,-0.017321374166,0.390742021994, -1.09124657246,0.017321374166,0.357199722182, -1.09124657246,0.0519641224981,0.32449100155, -1.09124657246,0.0866068708302,0.291680460524, -1.09124657246,0.121249619162,0.258552312306, -1.09124657246,0.155892367494,0.224599937556, -1.09124657246,0.190535115827,0.190372949393, -1.09124657246,0.225177864159,0.156069189798, -1.09124657246,0.259820612491,0.12169503218, -1.09124657246,0.294463360823,0.0872568522555, -1.09124657246,0.329106109155,0.0527497772228, -1.09124657246,0.363748857487,0.0181839803356, -1.09124657246,0.398391605819,-0.0164372334036, -1.09124657246,0.433034354151,-0.0511267919731, -1.09124657246,0.467677102483,-0.0858580683255, -1.09124657246,0.502319850815,-0.120666585537, -1.09124657246,0.536962599148,-0.155505268472, -1.09124657246,0.57160534748,-0.190400513559, -1.09124657246,0.606248095812,-0.225344747419, -1.09124657246,0.640890844144,-0.260335429107, -1.09124657246,0.675533592476,-0.295369724327, -1.09124657246,0.710176340808,-0.33044768417, -1.09124657246,0.74481908914,-0.365562140356, -1.09124657246,0.779461837472,-0.400720123714, -1.09124657246,0.814104585804,-0.435922044408, -1.09124657246,0.848747334136,-0.471148155346, -1.09124657246,0.883390082469,-0.506416948439, -1.09124657246,0.918032830801,-0.541723182307, -1.09124657246,0.952675579133,-0.577065814506, -1.09124657246,0.987318327465,-0.612431914301, -1.09124657246,1.0219610758,-0.64783252634, -1.09124657246,1.05660382413,-0.683264400821, -1.09124657246,1.09124657246,-0.718727805093, -1.09124657246,1.12588932079,-0.754216053853, -1.09124657246,1.16053206913,-0.789734763678, -1.09124657246,1.19517481746,-0.825278663637, -1.09124657246,1.22981756579,-0.860847298289, -1.09124657246,1.26446031412,-0.896444113441, -1.09124657246,1.29910306245,-0.932060228878, -1.09124657246,1.33374581079,-0.967707037814, -1.09124657246,1.36838855912,-1.00337395705, -1.09124657246,1.40303130745,-1.039071524, -1.09124657246,1.43767405578,-1.07478027713, -1.09124657246,1.47231680411,-1.11051479412, -1.09124657246,1.50695955245,-1.14626886684, -1.09124657246,1.54160230078,-1.18204469542, -1.09124657246,1.57624504911,-1.21784035051, -1.09124657246,1.61088779744,-1.25365658177, -1.09124657246,1.64553054577,-1.28948879599, -1.09124657246,1.68017329411,-1.32533904105, -1.09124657246,1.71481604244,-1.36121311632, -1.12588932079,-1.71481604244,1.69336339673, -1.12588932079,-1.68017329411,1.68101100697, -1.12588932079,-1.64553054577,1.66590027526, -1.12588932079,-1.61088779744,1.64854270296, -1.12588932079,-1.57624504911,1.62944353293, -1.12588932079,-1.54160230078,1.60880938738, -1.12588932079,-1.50695955245,1.58693138259, -1.12588932079,-1.47231680411,1.5638894885, -1.12588932079,-1.43767405578,1.53998046789, -1.12588932079,-1.40303130745,1.51518257844, -1.12588932079,-1.36838855912,1.48963477248, -1.12588932079,-1.33374581079,1.48544028267, -1.12588932079,-1.29910306245,1.48081443647, -1.12588932079,-1.26446031412,1.47126232635, -1.12588932079,-1.22981756579,1.45792397994, -1.12588932079,-1.19517481746,1.44155019964, -1.12588932079,-1.16053206913,1.42271624602, -1.12588932079,-1.12588932079,1.40186084296, -1.12588932079,-1.09124657246,1.37366814821, -1.12588932079,-1.05660382413,1.34481388904, -1.12588932079,-1.0219610758,1.3156724564, -1.12588932079,-0.987318327465,1.28626557743, -1.12588932079,-0.952675579133,1.25663161942, -1.12588932079,-0.918032830801,1.22675464714, -1.12588932079,-0.883390082469,1.19666536978, -1.12588932079,-0.848747334136,1.16636716405, -1.12588932079,-0.814104585804,1.13588459859, -1.12588932079,-0.779461837472,1.10522234654, -1.12588932079,-0.74481908914,1.07437604813, -1.12588932079,-0.710176340808,1.04336804084, -1.12588932079,-0.675533592476,1.01220317116, -1.12588932079,-0.640890844144,0.980888334788, -1.12588932079,-0.606248095812,0.94942205112, -1.12588932079,-0.57160534748,0.917814772467, -1.12588932079,-0.536962599148,0.886079856132, -1.12588932079,-0.502319850815,0.854207467116, -1.12588932079,-0.467677102483,0.822196966886, -1.12588932079,-0.433034354151,0.79007498801, -1.12588932079,-0.398391605819,0.757827005183, -1.12588932079,-0.363748857487,0.725458969421, -1.12588932079,-0.329106109155,0.69296685508, -1.12588932079,-0.294463360823,0.660369947464, -1.12588932079,-0.259820612491,0.627660611448, -1.12588932079,-0.225177864159,0.594843541232, -1.12588932079,-0.190535115827,0.561918448796, -1.12588932079,-0.155892367494,0.528886224544, -1.12588932079,-0.121249619162,0.495751366011, -1.12588932079,-0.0866068708302,0.462511596724, -1.12588932079,-0.0519641224981,0.429167059468, -1.12588932079,-0.017321374166,0.395723972947, -1.12588932079,0.017321374166,0.362196031917, -1.12588932079,0.0519641224981,0.329464346062, -1.12588932079,0.0866068708302,0.296650861167, -1.12588932079,0.121249619162,0.26352462966, -1.12588932079,0.155892367494,0.229613635978, -1.12588932079,0.190535115827,0.195383684628, -1.12588932079,0.225177864159,0.161085184948, -1.12588932079,0.259820612491,0.126709907279, -1.12588932079,0.294463360823,0.0922706814127, -1.12588932079,0.329106109155,0.0577703209901, -1.12588932079,0.363748857487,0.0231991710368, -1.12588932079,0.398391605819,-0.0114269039998, -1.12588932079,0.433034354151,-0.0461141591809, -1.12588932079,0.467677102483,-0.080846577712, -1.12588932079,0.502319850815,-0.115647410225, -1.12588932079,0.536962599148,-0.150490042553, -1.12588932079,0.57160534748,-0.185388172861, -1.12588932079,0.606248095812,-0.220331696272, -1.12588932079,0.640890844144,-0.255319538925, -1.12588932079,0.675533592476,-0.290353887122, -1.12588932079,0.710176340808,-0.325434659911, -1.12588932079,0.74481908914,-0.360553925665, -1.12588932079,0.779461837472,-0.395708007424, -1.12588932079,0.814104585804,-0.430910154123, -1.12588932079,0.848747334136,-0.466141345796, -1.12588932079,0.883390082469,-0.501413111778, -1.12588932079,0.918032830801,-0.536714109616, -1.12588932079,0.952675579133,-0.572056262512, -1.12588932079,0.987318327465,-0.607425256703, -1.12588932079,1.0219610758,-0.642826698873, -1.12588932079,1.05660382413,-0.678259724214, -1.12588932079,1.09124657246,-0.713721765931, -1.12588932079,1.12588932079,-0.749211754328, -1.12588932079,1.16053206913,-0.784732240194, -1.12588932079,1.19517481746,-0.820278659996, -1.12588932079,1.22981756579,-0.855844212994, -1.12588932079,1.26446031412,-0.891443969257, -1.12588932079,1.29910306245,-0.9270682193, -1.12588932079,1.33374581079,-0.96270783034, -1.12588932079,1.36838855912,-0.998378265729, -1.12588932079,1.40303130745,-1.03407876016, -1.12588932079,1.43767405578,-1.06977880522, -1.12588932079,1.47231680411,-1.10551947404, -1.12588932079,1.50695955245,-1.14127791192, -1.12588932079,1.54160230078,-1.17705328254, -1.12588932079,1.57624504911,-1.21284974202, -1.12588932079,1.61088779744,-1.24866736845, -1.12588932079,1.64553054577,-1.28450121054, -1.12588932079,1.68017329411,-1.32035220902, -1.12588932079,1.71481604244,-1.35622273227, -1.16053206913,-1.71481604244,1.6978843429, -1.16053206913,-1.68017329411,1.68553284481, -1.16053206913,-1.64553054577,1.6704234101, -1.16053206913,-1.61088779744,1.65306665687, -1.16053206913,-1.57624504911,1.6339677894, -1.16053206913,-1.54160230078,1.61333830145, -1.16053206913,-1.50695955245,1.59145778703, -1.16053206913,-1.47231680411,1.56841571355, -1.16053206913,-1.43767405578,1.54446053216, -1.16053206913,-1.40303130745,1.51970663458, -1.16053206913,-1.36838855912,1.49416863424, -1.16053206913,-1.33374581079,1.49034949654, -1.16053206913,-1.29910306245,1.48572843481, -1.16053206913,-1.26446031412,1.47617185875, -1.16053206913,-1.22981756579,1.46283347325, -1.16053206913,-1.19517481746,1.44646128039, -1.16053206913,-1.16053206913,1.42762694952, -1.16053206913,-1.12588932079,1.40677326861, -1.16053206913,-1.09124657246,1.37841850866, -1.16053206913,-1.05660382413,1.34956141546, -1.16053206913,-1.0219610758,1.32041888722, -1.16053206913,-0.987318327465,1.29102692839, -1.16053206913,-0.952675579133,1.26139252327, -1.16053206913,-0.918032830801,1.23152591307, -1.16053206913,-0.883390082469,1.20143992902, -1.16053206913,-0.848747334136,1.17115020778, -1.16053206913,-0.814104585804,1.1406780012, -1.16053206913,-0.779461837472,1.11001168783, -1.16053206913,-0.74481908914,1.07917717748, -1.16053206913,-0.710176340808,1.0481708484, -1.16053206913,-0.675533592476,1.01701738885, -1.16053206913,-0.640890844144,0.985700580249, -1.16053206913,-0.606248095812,0.954249784025, -1.16053206913,-0.57160534748,0.922650804797, -1.16053206913,-0.536962599148,0.89092002423, -1.16053206913,-0.502319850815,0.859051703929, -1.16053206913,-0.467677102483,0.827049221042, -1.16053206913,-0.433034354151,0.794935955333, -1.16053206913,-0.398391605819,0.762686851258, -1.16053206913,-0.363748857487,0.730324607812, -1.16053206913,-0.329106109155,0.697846076379, -1.16053206913,-0.294463360823,0.665254917124, -1.16053206913,-0.259820612491,0.632548820897, -1.16053206913,-0.225177864159,0.599733575523, -1.16053206913,-0.190535115827,0.566813766132, -1.16053206913,-0.155892367494,0.533787495879, -1.16053206913,-0.121249619162,0.500658311092, -1.16053206913,-0.0866068708302,0.467418323852, -1.16053206913,-0.0519641224981,0.434077800761, -1.16053206913,-0.017321374166,0.400642958192, -1.16053206913,0.017321374166,0.367105517025, -1.16053206913,0.0519641224981,0.334381306517, -1.16053206913,0.0866068708302,0.301562211659, -1.16053206913,0.121249619162,0.268434874408, -1.16053206913,0.155892367494,0.234567240836, -1.16053206913,0.190535115827,0.200338078524, -1.16053206913,0.225177864159,0.166034007511, -1.16053206913,0.259820612491,0.131662302404, -1.16053206913,0.294463360823,0.0972266129659, -1.16053206913,0.329106109155,0.0627219095423, -1.16053206913,0.363748857487,0.028155396733, -1.16053206913,0.398391605819,-0.00647426541205, -1.16053206913,0.433034354151,-0.0411600334175, -1.16053206913,0.467677102483,-0.0758966931092, -1.16053206913,0.502319850815,-0.110696703498, -1.16053206913,0.536962599148,-0.145537378414, -1.16053206913,0.57160534748,-0.18043223205, -1.16053206913,0.606248095812,-0.215377685102, -1.16053206913,0.640890844144,-0.250368681428, -1.16053206913,0.675533592476,-0.285404999871, -1.16053206913,0.710176340808,-0.32048317579, -1.16053206913,0.74481908914,-0.355601672148, -1.16053206913,0.779461837472,-0.390760784517, -1.16053206913,0.814104585804,-0.425960855256, -1.16053206913,0.848747334136,-0.46119572942, -1.16053206913,0.883390082469,-0.496459027686, -1.16053206913,0.918032830801,-0.531769655318, -1.16053206913,0.952675579133,-0.567100660745, -1.16053206913,0.987318327465,-0.602479566197, -1.16053206913,1.0219610758,-0.637882257683, -1.16053206913,1.05660382413,-0.673316354827, -1.16053206913,1.09124657246,-0.708779217499, -1.16053206913,1.12588932079,-0.744267940694, -1.16053206913,1.16053206913,-0.779788159441, -1.16053206913,1.19517481746,-0.815336463994, -1.16053206913,1.22981756579,-0.850907416085, -1.16053206913,1.26446031412,-0.886507645534, -1.16053206913,1.29910306245,-0.922128785218, -1.16053206913,1.33374581079,-0.957771544073, -1.16053206913,1.36838855912,-0.993447973478, -1.16053206913,1.40303130745,-1.02914071885, -1.16053206913,1.43767405578,-1.06485493035, -1.16053206913,1.47231680411,-1.10058624269, -1.16053206913,1.50695955245,-1.13634318363, -1.16053206913,1.54160230078,-1.17212234428, -1.16053206913,1.57624504911,-1.20791991184, -1.16053206913,1.61088779744,-1.24373684994, -1.16053206913,1.64553054577,-1.27957164761, -1.16053206913,1.68017329411,-1.31542481822, -1.16053206913,1.71481604244,-1.35129627985, -1.19517481746,-1.71481604244,1.70234579329, -1.19517481746,-1.68017329411,1.68999515972, -1.19517481746,-1.64553054577,1.67488472391, -1.19517481746,-1.61088779744,1.65757796166, -1.19517481746,-1.57624504911,1.63843428772, -1.19517481746,-1.54160230078,1.61780317279, -1.19517481746,-1.50695955245,1.59592423571, -1.19517481746,-1.47231680411,1.57288667082, -1.19517481746,-1.43767405578,1.54893201535, -1.19517481746,-1.40303130745,1.52418180781, -1.19517481746,-1.36838855912,1.49863474646, -1.19517481746,-1.33374581079,1.49520017611, -1.19517481746,-1.29910306245,1.49057846174, -1.19517481746,-1.26446031412,1.48102700768, -1.19517481746,-1.22981756579,1.46768545957, -1.19517481746,-1.19517481746,1.45131176885, -1.19517481746,-1.16053206913,1.43248248553, -1.19517481746,-1.12588932079,1.4116273978, -1.19517481746,-1.09124657246,1.38309344636, -1.19517481746,-1.05660382413,1.35423874535, -1.19517481746,-1.0219610758,1.32511589798, -1.19517481746,-0.987318327465,1.29573031303, -1.19517481746,-0.952675579133,1.26609563821, -1.19517481746,-0.918032830801,1.23623791118, -1.19517481746,-0.883390082469,1.20615781862, -1.19517481746,-0.848747334136,1.17587858695, -1.19517481746,-0.814104585804,1.14540016223, -1.19517481746,-0.779461837472,1.11474893767, -1.19517481746,-0.74481908914,1.08392069425, -1.19517481746,-0.710176340808,1.05292479682, -1.19517481746,-0.675533592476,1.02176615902, -1.19517481746,-0.640890844144,0.990462890664, -1.19517481746,-0.606248095812,0.959019215515, -1.19517481746,-0.57160534748,0.927426741602, -1.19517481746,-0.536962599148,0.895696516385, -1.19517481746,-0.502319850815,0.863826059953, -1.19517481746,-0.467677102483,0.831838601209, -1.19517481746,-0.433034354151,0.799728501551, -1.19517481746,-0.398391605819,0.767490780775, -1.19517481746,-0.363748857487,0.735138641275, -1.19517481746,-0.329106109155,0.70265842055, -1.19517481746,-0.294463360823,0.670073591516, -1.19517481746,-0.259820612491,0.637379095624, -1.19517481746,-0.225177864159,0.604570460157, -1.19517481746,-0.190535115827,0.571654460919, -1.19517481746,-0.155892367494,0.538630311226, -1.19517481746,-0.121249619162,0.505508268478, -1.19517481746,-0.0866068708302,0.472268653602, -1.19517481746,-0.0519641224981,0.438942596658, -1.19517481746,-0.017321374166,0.405500605554, -1.19517481746,0.017321374166,0.371980308369, -1.19517481746,0.0519641224981,0.339220100569, -1.19517481746,0.0866068708302,0.306413623065, -1.19517481746,0.121249619162,0.273287266502, -1.19517481746,0.155892367494,0.239455891664, -1.19517481746,0.190535115827,0.205229854176, -1.19517481746,0.225177864159,0.170930716952, -1.19517481746,0.259820612491,0.136558980059, -1.19517481746,0.294463360823,0.102119727184, -1.19517481746,0.329106109155,0.0676211693711, -1.19517481746,0.363748857487,0.033053971466, -1.19517481746,0.398391605819,-0.00157809042701, -1.19517481746,0.433034354151,-0.0362631311319, -1.19517481746,0.467677102483,-0.0710069082735, -1.19517481746,0.502319850815,-0.105795301851, -1.19517481746,0.536962599148,-0.140643665363, -1.19517481746,0.57160534748,-0.175538824858, -1.19517481746,0.606248095812,-0.210484270442, -1.19517481746,0.640890844144,-0.245474269121, -1.19517481746,0.675533592476,-0.280513047741, -1.19517481746,0.710176340808,-0.315591731587, -1.19517481746,0.74481908914,-0.350710021241, -1.19517481746,0.779461837472,-0.385869879234, -1.19517481746,0.814104585804,-0.421072571472, -1.19517481746,0.848747334136,-0.456300151334, -1.19517481746,0.883390082469,-0.49157705473, -1.19517481746,0.918032830801,-0.526888095994, -1.19517481746,0.952675579133,-0.56221435897, -1.19517481746,0.987318327465,-0.597585610242, -1.19517481746,1.0219610758,-0.632997707377, -1.19517481746,1.05660382413,-0.668430047832, -1.19517481746,1.09124657246,-0.70389523383, -1.19517481746,1.12588932079,-0.739387088584, -1.19517481746,1.16053206913,-0.774905889658, -1.19517481746,1.19517481746,-0.810456379325, -1.19517481746,1.22981756579,-0.846028447388, -1.19517481746,1.26446031412,-0.881625586392, -1.19517481746,1.29910306245,-0.917250443713, -1.19517481746,1.33374581079,-0.952896568547, -1.19517481746,1.36838855912,-0.988567933367, -1.19517481746,1.40303130745,-1.02425636877, -1.19517481746,1.43767405578,-1.05997180616, -1.19517481746,1.47231680411,-1.09571127998, -1.19517481746,1.50695955245,-1.13146894685, -1.19517481746,1.54160230078,-1.16724721365, -1.19517481746,1.57624504911,-1.20304554807, -1.19517481746,1.61088779744,-1.23886370838, -1.19517481746,1.64553054577,-1.27469883579, -1.19517481746,1.68017329411,-1.31055549554, -1.19517481746,1.71481604244,-1.34643206942, -1.22981756579,-1.71481604244,1.70679447855, -1.22981756579,-1.68017329411,1.69439727071, -1.22981756579,-1.64553054577,1.67928865353, -1.22981756579,-1.61088779744,1.66198264856, -1.22981756579,-1.57624504911,1.64283845348, -1.22981756579,-1.54160230078,1.62220941654, -1.22981756579,-1.50695955245,1.60033246562, -1.22981756579,-1.47231680411,1.57734641806, -1.22981756579,-1.43767405578,1.5533933626, -1.22981756579,-1.40303130745,1.52859286017, -1.22981756579,-1.36838855912,1.50305378966, -1.22981756579,-1.33374581079,1.49999993784, -1.22981756579,-1.29910306245,1.49537904019, -1.22981756579,-1.26446031412,1.48582216349, -1.22981756579,-1.22981756579,1.4724812417, -1.22981756579,-1.19517481746,1.45611093261, -1.22981756579,-1.16053206913,1.43727548772, -1.22981756579,-1.12588932079,1.41626429424, -1.22981756579,-1.09124657246,1.38772817832, -1.22981756579,-1.05660382413,1.35887320705, -1.22981756579,-1.0219610758,1.32974991961, -1.22981756579,-0.987318327465,1.30037718343, -1.22981756579,-0.952675579133,1.27075013835, -1.22981756579,-0.918032830801,1.24089217483, -1.22981756579,-0.883390082469,1.21081519576, -1.22981756579,-0.848747334136,1.18054144501, -1.22981756579,-0.814104585804,1.15007795832, -1.22981756579,-0.779461837472,1.11943104705, -1.22981756579,-0.74481908914,1.08860324874, -1.22981756579,-0.710176340808,1.0576140871, -1.22981756579,-0.675533592476,1.02647075797, -1.22981756579,-0.640890844144,0.995176126818, -1.22981756579,-0.606248095812,0.963731770116, -1.22981756579,-0.57160534748,0.932144124737, -1.22981756579,-0.536962599148,0.900423128865, -1.22981756579,-0.502319850815,0.868560855422, -1.22981756579,-0.467677102483,0.836583284468, -1.22981756579,-0.433034354151,0.804468221423, -1.22981756579,-0.398391605819,0.772240027305, -1.22981756579,-0.363748857487,0.739888743961, -1.22981756579,-0.329106109155,0.707421424907, -1.22981756579,-0.294463360823,0.674842521461, -1.22981756579,-0.259820612491,0.642148493182, -1.22981756579,-0.225177864159,0.609345116078, -1.22981756579,-0.190535115827,0.576435709856, -1.22981756579,-0.155892367494,0.543416046757, -1.22981756579,-0.121249619162,0.51029428087, -1.22981756579,-0.0866068708302,0.477063813337, -1.22981756579,-0.0519641224981,0.443739092982, -1.22981756579,-0.017321374166,0.410311948622, -1.22981756579,0.017321374166,0.376788321889, -1.22981756579,0.0519641224981,0.344020830201, -1.22981756579,0.0866068708302,0.311208763132, -1.22981756579,0.121249619162,0.278083132361, -1.22981756579,0.155892367494,0.244290543646, -1.22981756579,0.190535115827,0.210064253505, -1.22981756579,0.225177864159,0.175763352097, -1.22981756579,0.259820612491,0.141396005471, -1.22981756579,0.294463360823,0.106957675952, -1.22981756579,0.329106109155,0.0724547429676, -1.22981756579,0.363748857487,0.0378877140172, -1.22981756579,0.398391605819,0.00326281279855, -1.22981756579,0.433034354151,-0.0314222080146, -1.22981756579,0.467677102483,-0.0661616480097, -1.22981756579,0.502319850815,-0.10095928593, -1.22981756579,0.536962599148,-0.135797579788, -1.22981756579,0.57160534748,-0.170703967786, -1.22981756579,0.606248095812,-0.205649969308, -1.22981756579,0.640890844144,-0.240641788575, -1.22981756579,0.675533592476,-0.275676802207, -1.22981756579,0.710176340808,-0.310758881544, -1.22981756579,0.74481908914,-0.345877488068, -1.22981756579,0.779461837472,-0.381040779321, -1.22981756579,0.814104585804,-0.41623584681, -1.22981756579,0.848747334136,-0.451472759861, -1.22981756579,0.883390082469,-0.486742414542, -1.22981756579,0.918032830801,-0.522054398578, -1.22981756579,0.952675579133,-0.557395261192, -1.22981756579,0.987318327465,-0.592769072207, -1.22981756579,1.0219610758,-0.628169348738, -1.22981756579,1.05660382413,-0.663604939418, -1.22981756579,1.09124657246,-0.699068465783, -1.22981756579,1.12588932079,-0.734563723581, -1.22981756579,1.16053206913,-0.770083853989, -1.22981756579,1.19517481746,-0.805631388151, -1.22981756579,1.22981756579,-0.841206004795, -1.22981756579,1.26446031412,-0.876804437337, -1.22981756579,1.29910306245,-0.912431664793, -1.22981756579,1.33374581079,-0.948070417098, -1.22981756579,1.36838855912,-0.983750414691, -1.22981756579,1.40303130745,-1.0194402538, -1.22981756579,1.43767405578,-1.05516642183, -1.22981756579,1.47231680411,-1.09089546221, -1.22981756579,1.50695955245,-1.1266537101, -1.22981756579,1.54160230078,-1.16243302293, -1.22981756579,1.57624504911,-1.19823302205, -1.22981756579,1.61088779744,-1.23405115047, -1.22981756579,1.64553054577,-1.2698922407, -1.22981756579,1.68017329411,-1.30574291392, -1.22981756579,1.71481604244,-1.34162086009, -1.26446031412,-1.71481604244,1.71113883448, -1.26446031412,-1.68017329411,1.69879248197, -1.26446031412,-1.64553054577,1.6836847407, -1.26446031412,-1.61088779744,1.66633215233, -1.26446031412,-1.57624504911,1.64723656141, -1.26446031412,-1.54160230078,1.6266088638, -1.26446031412,-1.50695955245,1.6046878601, -1.26446031412,-1.47231680411,1.58169766364, -1.26446031412,-1.43767405578,1.55774457088, -1.26446031412,-1.40303130745,1.53295243255, -1.26446031412,-1.36838855912,1.50745679304, -1.26446031412,-1.33374581079,1.50473748211, -1.26446031412,-1.29910306245,1.50011848807, -1.26446031412,-1.26446031412,1.49056538498, -1.26446031412,-1.22981756579,1.4772220797, -1.26446031412,-1.19517481746,1.46085212402, -1.26446031412,-1.16053206913,1.4420159596, -1.26446031412,-1.12588932079,1.4208344072, -1.26446031412,-1.09124657246,1.39230179787, -1.26446031412,-1.05660382413,1.36345306266, -1.26446031412,-1.0219610758,1.33433691676, -1.26446031412,-0.987318327465,1.30496893607, -1.26446031412,-0.952675579133,1.27533798835, -1.26446031412,-0.918032830801,1.24548798639, -1.26446031412,-0.883390082469,1.2154264156, -1.26446031412,-0.848747334136,1.18515846127, -1.26446031412,-0.814104585804,1.15469824363, -1.26446031412,-0.779461837472,1.1240553086, -1.26446031412,-0.74481908914,1.09324043011, -1.26446031412,-0.710176340808,1.06225685012, -1.26446031412,-0.675533592476,1.03111279813, -1.26446031412,-0.640890844144,0.999819067449, -1.26446031412,-0.606248095812,0.968380230032, -1.26446031412,-0.57160534748,0.93680443546, -1.26446031412,-0.536962599148,0.905089013524, -1.26446031412,-0.502319850815,0.873228807271, -1.26446031412,-0.467677102483,0.841267713786, -1.26446031412,-0.433034354151,0.809156191528, -1.26446031412,-0.398391605819,0.776931368824, -1.26446031412,-0.363748857487,0.744589689014, -1.26446031412,-0.329106109155,0.712126789348, -1.26446031412,-0.294463360823,0.679548269811, -1.26446031412,-0.259820612491,0.646862808047, -1.26446031412,-0.225177864159,0.614064162512, -1.26446031412,-0.190535115827,0.581159006377, -1.26446031412,-0.155892367494,0.548146030672, -1.26446031412,-0.121249619162,0.515026182069, -1.26446031412,-0.0866068708302,0.481804992798, -1.26446031412,-0.0519641224981,0.448480536438, -1.26446031412,-0.017321374166,0.41505123945, -1.26446031412,0.017321374166,0.381531533645, -1.26446031412,0.0519641224981,0.348765261827, -1.26446031412,0.0866068708302,0.315948897057, -1.26446031412,0.121249619162,0.282821228081, -1.26446031412,0.155892367494,0.249066304967, -1.26446031412,0.190535115827,0.214842585081, -1.26446031412,0.225177864159,0.180542051809, -1.26446031412,0.259820612491,0.146174842218, -1.26446031412,0.294463360823,0.111735738823, -1.26446031412,0.329106109155,0.0772314763146, -1.26446031412,0.363748857487,0.042666705539, -1.26446031412,0.398391605819,0.00803980719714, -1.26446031412,0.433034354151,-0.0266476797547, -1.26446031412,0.467677102483,-0.0613880896464, -1.26446031412,0.502319850815,-0.0961867953731, -1.26446031412,0.536962599148,-0.131035447152, -1.26446031412,0.57160534748,-0.165926271603, -1.26446031412,0.606248095812,-0.200870608489, -1.26446031412,0.640890844144,-0.235863091895, -1.26446031412,0.675533592476,-0.270898948374, -1.26446031412,0.710176340808,-0.305978622572, -1.26446031412,0.74481908914,-0.341102642322, -1.26446031412,0.779461837472,-0.376265347398, -1.26446031412,0.814104585804,-0.411465285308, -1.26446031412,0.848747334136,-0.446702268448, -1.26446031412,0.883390082469,-0.481976450813, -1.26446031412,0.918032830801,-0.517280978581, -1.26446031412,0.952675579133,-0.552625812037, -1.26446031412,0.987318327465,-0.587990203477, -1.26446031412,1.0219610758,-0.62340036097, -1.26446031412,1.05660382413,-0.658834196269, -1.26446031412,1.09124657246,-0.694300738369, -1.26446031412,1.12588932079,-0.729792792806, -1.26446031412,1.16053206913,-0.765316095492, -1.26446031412,1.19517481746,-0.800865623651, -1.26446031412,1.22981756579,-0.836438828344, -1.26446031412,1.26446031412,-0.872035117513, -1.26446031412,1.29910306245,-0.907662014292, -1.26446031412,1.33374581079,-0.943313732253, -1.26446031412,1.36838855912,-0.978981000562, -1.26446031412,1.40303130745,-1.01467511045, -1.26446031412,1.43767405578,-1.05039980513, -1.26446031412,1.47231680411,-1.08613518256, -1.26446031412,1.50695955245,-1.12189603722, -1.26446031412,1.54160230078,-1.15767512618, -1.26446031412,1.57624504911,-1.19347703088, -1.26446031412,1.61088779744,-1.22929325052, -1.26446031412,1.64553054577,-1.26513424788, -1.26446031412,1.68017329411,-1.30099202624, -1.26446031412,1.71481604244,-1.33686906759, -1.29910306245,-1.71481604244,1.71547832914, -1.29910306245,-1.68017329411,1.70308068066, -1.29910306245,-1.64553054577,1.68797518426, -1.29910306245,-1.61088779744,1.67067101392, -1.29910306245,-1.57624504911,1.65152946518, -1.29910306245,-1.54160230078,1.63090505697, -1.29910306245,-1.50695955245,1.60902822734, -1.29910306245,-1.47231680411,1.58599424623, -1.29910306245,-1.43767405578,1.56204572679, -1.29910306245,-1.40303130745,1.53729814049, -1.29910306245,-1.36838855912,1.51176032061, -1.29910306245,-1.33374581079,1.50942048118, -1.29910306245,-1.29910306245,1.50480453987, -1.29910306245,-1.26446031412,1.49525129623, -1.29910306245,-1.22981756579,1.4819091927, -1.29910306245,-1.19517481746,1.46553676706, -1.29910306245,-1.16053206913,1.44670495706, -1.29910306245,-1.12588932079,1.42534887798, -1.29910306245,-1.09124657246,1.39681605378, -1.29910306245,-1.05660382413,1.36799159943, -1.29910306245,-1.0219610758,1.3388777054, -1.29910306245,-0.987318327465,1.30950691467, -1.29910306245,-0.952675579133,1.27987977518, -1.29910306245,-0.918032830801,1.25003975425, -1.29910306245,-0.883390082469,1.21998228317, -1.29910306245,-0.848747334136,1.18971593267, -1.29910306245,-0.814104585804,1.15926249954, -1.29910306245,-0.779461837472,1.12863101746, -1.29910306245,-0.74481908914,1.09781929358, -1.29910306245,-0.710176340808,1.06683796611, -1.29910306245,-0.675533592476,1.03570640667, -1.29910306245,-0.640890844144,1.00442279267, -1.29910306245,-0.606248095812,0.972983289294, -1.29910306245,-0.57160534748,0.941418909402, -1.29910306245,-0.536962599148,0.909695834046, -1.29910306245,-0.502319850815,0.877858835638, -1.29910306245,-0.467677102483,0.845893508404, -1.29910306245,-0.433034354151,0.813793458691, -1.29910306245,-0.398391605819,0.781570578992, -1.29910306245,-0.363748857487,0.749232212303, -1.29910306245,-0.329106109155,0.716775942548, -1.29910306245,-0.294463360823,0.684206593405, -1.29910306245,-0.259820612491,0.651523289866, -1.29910306245,-0.225177864159,0.618733699511, -1.29910306245,-0.190535115827,0.585831454337, -1.29910306245,-0.155892367494,0.552821545402, -1.29910306245,-0.121249619162,0.519712994852, -1.29910306245,-0.0866068708302,0.486493345524, -1.29910306245,-0.0519641224981,0.453168153023, -1.29910306245,-0.017321374166,0.419746572799, -1.29910306245,0.017321374166,0.386226997917, -1.29910306245,0.0519641224981,0.353436873327, -1.29910306245,0.0866068708302,0.320633152512, -1.29910306245,0.121249619162,0.287505434648, -1.29910306245,0.155892367494,0.253787550296, -1.29910306245,0.190535115827,0.21956266315, -1.29910306245,0.225177864159,0.185267935288, -1.29910306245,0.259820612491,0.150896899764, -1.29910306245,0.294463360823,0.116461179892, -1.29910306245,0.329106109155,0.0819594911202, -1.29910306245,0.363748857487,0.047392120669, -1.29910306245,0.398391605819,0.0127642636415, -1.29910306245,0.433034354151,-0.0219148636798, -1.29910306245,0.467677102483,-0.0566569429769, -1.29910306245,0.502319850815,-0.0914600509569, -1.29910306245,0.536962599148,-0.126306584727, -1.29910306245,0.57160534748,-0.161204396103, -1.29910306245,0.606248095812,-0.196150363562, -1.29910306245,0.640890844144,-0.231143443268, -1.29910306245,0.675533592476,-0.266178062143, -1.29910306245,0.710176340808,-0.30125893454, -1.29910306245,0.74481908914,-0.336384105592, -1.29910306245,0.779461837472,-0.371542479748, -1.29910306245,0.814104585804,-0.406743774423, -1.29910306245,0.848747334136,-0.441978334562, -1.29910306245,0.883390082469,-0.477255574223, -1.29910306245,0.918032830801,-0.512566279831, -1.29910306245,0.952675579133,-0.54790517661, -1.29910306245,0.987318327465,-0.583285185607, -1.29910306245,1.0219610758,-0.618684936516, -1.29910306245,1.05660382413,-0.654121795956, -1.29910306245,1.09124657246,-0.68958751836, -1.29910306245,1.12588932079,-0.725080556354, -1.29910306245,1.16053206913,-0.760605801655, -1.29910306245,1.19517481746,-0.796152424627, -1.29910306245,1.22981756579,-0.831725698487, -1.29910306245,1.26446031412,-0.867331333603, -1.29910306245,1.29910306245,-0.902958205057, -1.29910306245,1.33374581079,-0.938603440704, -1.29910306245,1.36838855912,-0.974271408258, -1.29910306245,1.40303130745,-1.00997485342, -1.29910306245,1.43767405578,-1.04568956209, -1.29910306245,1.47231680411,-1.08143130892, -1.29910306245,1.50695955245,-1.11719202579, -1.29910306245,1.54160230078,-1.1529722264, -1.29910306245,1.57624504911,-1.18877267427, -1.29910306245,1.61088779744,-1.22459310088, -1.29910306245,1.64553054577,-1.26043429382, -1.29910306245,1.68017329411,-1.296288977, -1.29910306245,1.71481604244,-1.33216790546, -1.33374581079,-1.71481604244,1.71970577211, -1.33374581079,-1.68017329411,1.70736536709, -1.33374581079,-1.64553054577,1.69226136527, -1.33374581079,-1.61088779744,1.67490843196, -1.33374581079,-1.57624504911,1.65581730496, -1.33374581079,-1.54160230078,1.63519222045, -1.33374581079,-1.50695955245,1.61327048498, -1.33374581079,-1.47231680411,1.5902856501, -1.33374581079,-1.43767405578,1.56633854237, -1.33374581079,-1.40303130745,1.541542487, -1.33374581079,-1.36838855912,1.51600324025, -1.33374581079,-1.33374581079,1.51405599644, -1.33374581079,-1.29910306245,1.50943239674, -1.33374581079,-1.26446031412,1.49988131825, -1.33374581079,-1.22981756579,1.48654376057, -1.33374581079,-1.19517481746,1.47017346321, -1.33374581079,-1.16053206913,1.45133557339, -1.33374581079,-1.12588932079,1.42981796002, -1.33374581079,-1.09124657246,1.40129292926, -1.33374581079,-1.05660382413,1.37245418136, -1.33374581079,-1.0219610758,1.34334605696, -1.33374581079,-0.987318327465,1.31399241289, -1.33374581079,-0.952675579133,1.28437628867, -1.33374581079,-0.918032830801,1.25453556287, -1.33374581079,-0.883390082469,1.22448418252, -1.33374581079,-0.848747334136,1.19422961529, -1.33374581079,-0.814104585804,1.16378197903, -1.33374581079,-0.779461837472,1.13314385435, -1.33374581079,-0.74481908914,1.10234583811, -1.33374581079,-0.710176340808,1.07136955203, -1.33374581079,-0.675533592476,1.04024043399, -1.33374581079,-0.640890844144,1.00896649686, -1.33374581079,-0.606248095812,0.977541643743, -1.33374581079,-0.57160534748,0.945969074766, -1.33374581079,-0.536962599148,0.914267619577, -1.33374581079,-0.502319850815,0.882424869774, -1.33374581079,-0.467677102483,0.850462220224, -1.33374581079,-0.433034354151,0.818363039839, -1.33374581079,-0.398391605819,0.78615876903, -1.33374581079,-0.363748857487,0.753827739765, -1.33374581079,-0.329106109155,0.721373163668, -1.33374581079,-0.294463360823,0.688808043645, -1.33374581079,-0.259820612491,0.656131146513, -1.33374581079,-0.225177864159,0.623345219107, -1.33374581079,-0.190535115827,0.59044851313, -1.33374581079,-0.155892367494,0.557443829685, -1.33374581079,-0.121249619162,0.5243322947, -1.33374581079,-0.0866068708302,0.491120948527, -1.33374581079,-0.0519641224981,0.457803129043, -1.33374581079,-0.017321374166,0.42438590067, -1.33374581079,0.017321374166,0.390875486751, -1.33374581079,0.0519641224981,0.358072990837, -1.33374581079,0.0866068708302,0.325262855842, -1.33374581079,0.121249619162,0.292136945226, -1.33374581079,0.155892367494,0.25845548556, -1.33374581079,0.190535115827,0.224232691394, -1.33374581079,0.225177864159,0.189934102417, -1.33374581079,0.259820612491,0.155568267705, -1.33374581079,0.294463360823,0.121129466394, -1.33374581079,0.329106109155,0.0866263011533, -1.33374581079,0.363748857487,0.0520650985336, -1.33374581079,0.398391605819,0.0174372519238, -1.33374581079,0.433034354151,-0.0172456197284, -1.33374581079,0.467677102483,-0.0519941671219, -1.33374581079,0.502319850815,-0.0867940792338, -1.33374581079,0.536962599148,-0.121629794962, -1.33374581079,0.57160534748,-0.156534842262, -1.33374581079,0.606248095812,-0.191482476555, -1.33374581079,0.640890844144,-0.226475101597, -1.33374581079,0.675533592476,-0.261512771884, -1.33374581079,0.710176340808,-0.296593801132, -1.33374581079,0.74481908914,-0.331715315862, -1.33374581079,0.779461837472,-0.366877327265, -1.33374581079,0.814104585804,-0.402077880993, -1.33374581079,0.848747334136,-0.437317909601, -1.33374581079,0.883390082469,-0.472589697636, -1.33374581079,0.918032830801,-0.50789633016, -1.33374581079,0.952675579133,-0.543247386536, -1.33374581079,0.987318327465,-0.578616126851, -1.33374581079,1.0219610758,-0.614024034908, -1.33374581079,1.05660382413,-0.649461251461, -1.33374581079,1.09124657246,-0.684927594, -1.33374581079,1.12588932079,-0.720421960543, -1.33374581079,1.16053206913,-0.755947318576, -1.33374581079,1.19517481746,-0.791495763407, -1.33374581079,1.22981756579,-0.827071456901, -1.33374581079,1.26446031412,-0.862676766923, -1.33374581079,1.29910306245,-0.898301139876, -1.33374581079,1.33374581079,-0.933949076943, -1.33374581079,1.36838855912,-0.969620065385, -1.33374581079,1.40303130745,-1.00532305544, -1.33374581079,1.43767405578,-1.04103435295, -1.33374581079,1.47231680411,-1.07678043076, -1.33374581079,1.50695955245,-1.11254051365, -1.33374581079,1.54160230078,-1.14832307073, -1.33374581079,1.57624504911,-1.18412593473, -1.33374581079,1.61088779744,-1.21994508031, -1.33374581079,1.64553054577,-1.25578592929, -1.33374581079,1.68017329411,-1.29164490435, -1.33374581079,1.71481604244,-1.32752352053, -1.36838855912,-1.71481604244,1.72393582648, -1.36838855912,-1.68017329411,1.71158995682, -1.36838855912,-1.64553054577,1.69648723003, -1.36838855912,-1.61088779744,1.67914166687, -1.36838855912,-1.57624504911,1.6600503559, -1.36838855912,-1.54160230078,1.63937805385, -1.36838855912,-1.50695955245,1.61750622348, -1.36838855912,-1.47231680411,1.59447635443, -1.36838855912,-1.43767405578,1.57052912753, -1.36838855912,-1.40303130745,1.54578447711, -1.36838855912,-1.36838855912,1.52024957771, -1.36838855912,-1.33374581079,1.51863344764, -1.36838855912,-1.29910306245,1.51401522933, -1.36838855912,-1.26446031412,1.50446292377, -1.36838855912,-1.22981756579,1.49112040496, -1.36838855912,-1.19517481746,1.47474891052, -1.36838855912,-1.16053206913,1.45591709768, -1.36838855912,-1.12588932079,1.43421655813, -1.36838855912,-1.09124657246,1.40570289943, -1.36838855912,-1.05660382413,1.37687793829, -1.36838855912,-1.0219610758,1.34778417768, -1.36838855912,-0.987318327465,1.31842667681, -1.36838855912,-0.952675579133,1.288810618, -1.36838855912,-0.918032830801,1.25898097316, -1.36838855912,-0.883390082469,1.22893106816, -1.36838855912,-0.848747334136,1.1986891406, -1.36838855912,-0.814104585804,1.16824779057, -1.36838855912,-0.779461837472,1.13761435949, -1.36838855912,-0.74481908914,1.10682127098, -1.36838855912,-0.710176340808,1.07585768637, -1.36838855912,-0.675533592476,1.04473423726, -1.36838855912,-0.640890844144,1.0134587535, -1.36838855912,-0.606248095812,0.982031891015, -1.36838855912,-0.57160534748,0.950475669355, -1.36838855912,-0.536962599148,0.918771503877, -1.36838855912,-0.502319850815,0.886941687633, -1.36838855912,-0.467677102483,0.85499036484, -1.36838855912,-0.433034354151,0.822902325757, -1.36838855912,-0.398391605819,0.790694952829, -1.36838855912,-0.363748857487,0.75836739848, -1.36838855912,-0.329106109155,0.725919583038, -1.36838855912,-0.294463360823,0.693360742593, -1.36838855912,-0.259820612491,0.660687545916, -1.36838855912,-0.225177864159,0.627904847662, -1.36838855912,-0.190535115827,0.595016942811, -1.36838855912,-0.155892367494,0.562014080526, -1.36838855912,-0.121249619162,0.528908739141, -1.36838855912,-0.0866068708302,0.495698332695, -1.36838855912,-0.0519641224981,0.462386612777, -1.36838855912,-0.017321374166,0.428970591233, -1.36838855912,0.017321374166,0.395463269029, -1.36838855912,0.0519641224981,0.362656587406, -1.36838855912,0.0866068708302,0.329845295381, -1.36838855912,0.121249619162,0.296716914428, -1.36838855912,0.155892367494,0.263071277966, -1.36838855912,0.190535115827,0.228847024994, -1.36838855912,0.225177864159,0.194549957239, -1.36838855912,0.259820612491,0.160180685547, -1.36838855912,0.294463360823,0.12574750315, -1.36838855912,0.329106109155,0.0912465975896, -1.36838855912,0.363748857487,0.0566790384101, -1.36838855912,0.398391605819,0.0220506714924, -1.36838855912,0.433034354151,-0.01263809661, -1.36838855912,0.467677102483,-0.047371838375, -1.36838855912,0.502319850815,-0.082171929187, -1.36838855912,0.536962599148,-0.117022149671, -1.36838855912,0.57160534748,-0.151918666012, -1.36838855912,0.606248095812,-0.186865843772, -1.36838855912,0.640890844144,-0.221860077632, -1.36838855912,0.675533592476,-0.256898137632, -1.36838855912,0.710176340808,-0.291981969935, -1.36838855912,0.74481908914,-0.327105574785, -1.36838855912,0.779461837472,-0.362268426727, -1.36838855912,0.814104585804,-0.397466282277, -1.36838855912,0.848747334136,-0.432710529275, -1.36838855912,0.883390082469,-0.467977539494, -1.36838855912,0.918032830801,-0.503294928612, -1.36838855912,0.952675579133,-0.538636111249, -1.36838855912,0.987318327465,-0.574017592453, -1.36838855912,1.0219610758,-0.609416402624, -1.36838855912,1.05660382413,-0.644853938458, -1.36838855912,1.09124657246,-0.680322713222, -1.36838855912,1.12588932079,-0.715819288059, -1.36838855912,1.16053206913,-0.751339571548, -1.36838855912,1.19517481746,-0.786894249077, -1.36838855912,1.22981756579,-0.822468667016, -1.36838855912,1.26446031412,-0.858070512264, -1.36838855912,1.29910306245,-0.893698445658, -1.36838855912,1.33374581079,-0.92934928898, -1.36838855912,1.36838855912,-0.965025463305, -1.36838855912,1.40303130745,-1.00071885943, -1.36838855912,1.43767405578,-1.03643288583, -1.36838855912,1.47231680411,-1.07218542342, -1.36838855912,1.50695955245,-1.1079427813, -1.36838855912,1.54160230078,-1.14372644854, -1.36838855912,1.57624504911,-1.17952849119, -1.36838855912,1.61088779744,-1.21535217215, -1.36838855912,1.64553054577,-1.2511929641, -1.36838855912,1.68017329411,-1.28705242454, -1.36838855912,1.71481604244,-1.32292754852, -1.40303130745,-1.71481604244,1.72811185107, -1.40303130745,-1.68017329411,1.71576923391, -1.40303130745,-1.64553054577,1.70066625458, -1.40303130745,-1.61088779744,1.68331612232, -1.40303130745,-1.57624504911,1.66418294971, -1.40303130745,-1.54160230078,1.64356224447, -1.40303130745,-1.50695955245,1.62169295578, -1.40303130745,-1.47231680411,1.59865894052, -1.40303130745,-1.43767405578,1.57471258377, -1.40303130745,-1.40303130745,1.54992489642, -1.40303130745,-1.36838855912,1.5244364698, -1.40303130745,-1.33374581079,1.5231599492, -1.40303130745,-1.29910306245,1.5185423345, -1.40303130745,-1.26446031412,1.50899105391, -1.40303130745,-1.22981756579,1.49565341746, -1.40303130745,-1.19517481746,1.47927869181, -1.40303130745,-1.16053206913,1.46045048588, -1.40303130745,-1.12588932079,1.43858091057, -1.40303130745,-1.09124657246,1.41007734808, -1.40303130745,-1.05660382413,1.38125208145, -1.40303130745,-1.0219610758,1.35216605277, -1.40303130745,-0.987318327465,1.32281090733, -1.40303130745,-0.952675579133,1.29321927409, -1.40303130745,-0.918032830801,1.26338715009, -1.40303130745,-0.883390082469,1.23333832477, -1.40303130745,-0.848747334136,1.20309857838, -1.40303130745,-0.814104585804,1.17266126943, -1.40303130745,-0.779461837472,1.14203949182, -1.40303130745,-0.74481908914,1.11124251141, -1.40303130745,-0.710176340808,1.08028819485, -1.40303130745,-0.675533592476,1.04917096875, -1.40303130745,-0.640890844144,1.01790073766, -1.40303130745,-0.606248095812,0.986487704973, -1.40303130745,-0.57160534748,0.954930171251, -1.40303130745,-0.536962599148,0.923231180542, -1.40303130745,-0.502319850815,0.891410302728, -1.40303130745,-0.467677102483,0.859463688518, -1.40303130745,-0.433034354151,0.827376648664, -1.40303130745,-0.398391605819,0.795178292257, -1.40303130745,-0.363748857487,0.762854984126, -1.40303130745,-0.329106109155,0.730413517255, -1.40303130745,-0.294463360823,0.69785912327, -1.40303130745,-0.259820612491,0.665193617792, -1.40303130745,-0.225177864159,0.63241824493, -1.40303130745,-0.190535115827,0.599527084941, -1.40303130745,-0.155892367494,0.56653345505, -1.40303130745,-0.121249619162,0.533435541149, -1.40303130745,-0.0866068708302,0.500226531034, -1.40303130745,-0.0519641224981,0.466919716041, -1.40303130745,-0.017321374166,0.433513975026, -1.40303130745,0.017321374166,0.399992058105, -1.40303130745,0.0519641224981,0.367188842224, -1.40303130745,0.0866068708302,0.334361717588, -1.40303130745,0.121249619162,0.301244153371, -1.40303130745,0.155892367494,0.267633335157, -1.40303130745,0.190535115827,0.233410252643, -1.40303130745,0.225177864159,0.199112691898, -1.40303130745,0.259820612491,0.164744779574, -1.40303130745,0.294463360823,0.130310934335, -1.40303130745,0.329106109155,0.095808428716, -1.40303130745,0.363748857487,0.0612430612839, -1.40303130745,0.398391605819,0.0266150819327, -1.40303130745,0.433034354151,-0.00806931574026, -1.40303130745,0.467677102483,-0.0428147777805, -1.40303130745,0.502319850815,-0.0776079687865, -1.40303130745,0.536962599148,-0.112463644552, -1.40303130745,0.57160534748,-0.147356763953, -1.40303130745,0.606248095812,-0.182304403286, -1.40303130745,0.640890844144,-0.217297163147, -1.40303130745,0.675533592476,-0.252336664208, -1.40303130745,0.710176340808,-0.287418025387, -1.40303130745,0.74481908914,-0.32254328908, -1.40303130745,0.779461837472,-0.357708423114, -1.40303130745,0.814104585804,-0.392907703042, -1.40303130745,0.848747334136,-0.428146577761, -1.40303130745,0.883390082469,-0.463427882767, -1.40303130745,0.918032830801,-0.498736000727, -1.40303130745,0.952675579133,-0.534084785482, -1.40303130745,0.987318327465,-0.569453420538, -1.40303130745,1.0219610758,-0.604860829111, -1.40303130745,1.05660382413,-0.64030104595, -1.40303130745,1.09124657246,-0.675768690949, -1.40303130745,1.12588932079,-0.711264345939, -1.40303130745,1.16053206913,-0.746789623712, -1.40303130745,1.19517481746,-0.782341712627, -1.40303130745,1.22981756579,-0.817916234355, -1.40303130745,1.26446031412,-0.853518546225, -1.40303130745,1.29910306245,-0.889148835648, -1.40303130745,1.33374581079,-0.924802774471, -1.40303130745,1.36838855912,-0.960474524767, -1.40303130745,1.40303130745,-0.996175292465, -1.40303130745,1.43767405578,-1.03190045311, -1.40303130745,1.47231680411,-1.06763700499, -1.40303130745,1.50695955245,-1.10339757727, -1.40303130745,1.54160230078,-1.13918118949, -1.40303130745,1.57624504911,-1.17498608607, -1.40303130745,1.61088779744,-1.21080903684, -1.40303130745,1.64553054577,-1.24664926702, -1.40303130745,1.68017329411,-1.28251042597, -1.40303130745,1.71481604244,-1.31839267857, -1.43767405578,-1.71481604244,1.73224330676, -1.43767405578,-1.68017329411,1.7198957542, -1.43767405578,-1.64553054577,1.70474496635, -1.43767405578,-1.61088779744,1.68744598425, -1.43767405578,-1.57624504911,1.66830920042, -1.43767405578,-1.54160230078,1.64769195746, -1.43767405578,-1.50695955245,1.62577484435, -1.43767405578,-1.47231680411,1.60279458142, -1.43767405578,-1.43767405578,1.57884954198, -1.43767405578,-1.40303130745,1.5540589586, -1.43767405578,-1.36838855912,1.52852780502, -1.43767405578,-1.33374581079,1.5276366197, -1.43767405578,-1.29910306245,1.52302071146, -1.43767405578,-1.26446031412,1.51346698976, -1.43767405578,-1.22981756579,1.50013096301, -1.43767405578,-1.19517481746,1.48375681898, -1.43767405578,-1.16053206913,1.46492924928, -1.43767405578,-1.12588932079,1.44291120071, -1.43767405578,-1.09124657246,1.41439749093, -1.43767405578,-1.05660382413,1.38558872268, -1.43767405578,-1.0219610758,1.35649323169, -1.43767405578,-0.987318327465,1.32714626238, -1.43767405578,-0.952675579133,1.29755104673, -1.43767405578,-0.918032830801,1.26773100803, -1.43767405578,-0.883390082469,1.23769278413, -1.43767405578,-0.848747334136,1.20745907338, -1.43767405578,-0.814104585804,1.17702369961, -1.43767405578,-0.779461837472,1.14640937739, -1.43767405578,-0.74481908914,1.11562342234, -1.43767405578,-0.710176340808,1.08467236773, -1.43767405578,-0.675533592476,1.05355784212, -1.43767405578,-0.640890844144,1.02230016806, -1.43767405578,-0.606248095812,0.990886139177, -1.43767405578,-0.57160534748,0.95934280415, -1.43767405578,-0.536962599148,0.927647384674, -1.43767405578,-0.502319850815,0.895831698815, -1.43767405578,-0.467677102483,0.863883595482, -1.43767405578,-0.433034354151,0.831804909749, -1.43767405578,-0.398391605819,0.799610058239, -1.43767405578,-0.363748857487,0.767296346865, -1.43767405578,-0.329106109155,0.73485620698, -1.43767405578,-0.294463360823,0.702307732197, -1.43767405578,-0.259820612491,0.66965045528, -1.43767405578,-0.225177864159,0.636877422122, -1.43767405578,-0.190535115827,0.603996089757, -1.43767405578,-0.155892367494,0.571003072249, -1.43767405578,-0.121249619162,0.537906555824, -1.43767405578,-0.0866068708302,0.504706546584, -1.43767405578,-0.0519641224981,0.471403515692, -1.43767405578,-0.017321374166,0.437993031658, -1.43767405578,0.017321374166,0.404491217593, -1.43767405578,0.0519641224981,0.37165459713, -1.43767405578,0.0866068708302,0.338856379672, -1.43767405578,0.121249619162,0.305722151688, -1.43767405578,0.155892367494,0.272142931372, -1.43767405578,0.190535115827,0.237923476072, -1.43767405578,0.225177864159,0.203627273052, -1.43767405578,0.259820612491,0.169261469178, -1.43767405578,0.294463360823,0.134826331299, -1.43767405578,0.329106109155,0.100319591367, -1.43767405578,0.363748857487,0.0657581906472, -1.43767405578,0.398391605819,0.0311314471477, -1.43767405578,0.433034354151,-0.00355972997026, -1.43767405578,0.467677102483,-0.0382963343284, -1.43767405578,0.502319850815,-0.0731006342438, -1.43767405578,0.536962599148,-0.107935947121, -1.43767405578,0.57160534748,-0.142843703459, -1.43767405578,0.606248095812,-0.177791886605, -1.43767405578,0.640890844144,-0.212785190658, -1.43767405578,0.675533592476,-0.24782711445, -1.43767405578,0.710176340808,-0.282909303223, -1.43767405578,0.74481908914,-0.31803248601, -1.43767405578,0.779461837472,-0.353196356431, -1.43767405578,0.814104585804,-0.388400913276, -1.43767405578,0.848747334136,-0.423641923974, -1.43767405578,0.883390082469,-0.458919273425, -1.43767405578,0.918032830801,-0.494230668344, -1.43767405578,0.952675579133,-0.529577836759, -1.43767405578,0.987318327465,-0.564940134042, -1.43767405578,1.0219610758,-0.600362050811, -1.43767405578,1.05660382413,-0.635796559242, -1.43767405578,1.09124657246,-0.671264434732, -1.43767405578,1.12588932079,-0.706762900678, -1.43767405578,1.16053206913,-0.742287998723, -1.43767405578,1.19517481746,-0.777837183021, -1.43767405578,1.22981756579,-0.813418728236, -1.43767405578,1.26446031412,-0.849019551395, -1.43767405578,1.29910306245,-0.884651069214, -1.43767405578,1.33374581079,-0.920298739775, -1.43767405578,1.36838855912,-0.955977996764, -1.43767405578,1.40303130745,-0.99167705545, -1.43767405578,1.43767405578,-1.02740241192, -1.43767405578,1.47231680411,-1.06313049804, -1.43767405578,1.50695955245,-1.09890369396, -1.43767405578,1.54160230078,-1.13468890771, -1.43767405578,1.57624504911,-1.17049079407, -1.43767405578,1.61088779744,-1.20631464445, -1.43767405578,1.64553054577,-1.24215850665, -1.43767405578,1.68017329411,-1.2780178318, -1.43767405578,1.71481604244,-1.31389720101, -1.47231680411,-1.71481604244,1.73631171515, -1.47231680411,-1.68017329411,1.72397305242, -1.47231680411,-1.64553054577,1.70887249853, -1.47231680411,-1.61088779744,1.69152495369, -1.47231680411,-1.57624504911,1.67243849174, -1.47231680411,-1.54160230078,1.65176876015, -1.47231680411,-1.50695955245,1.62985842801, -1.47231680411,-1.47231680411,1.60688071059, -1.47231680411,-1.43767405578,1.58293694655, -1.47231680411,-1.40303130745,1.55814789596, -1.47231680411,-1.36838855912,1.53261262225, -1.47231680411,-1.33374581079,1.5320698697, -1.47231680411,-1.29910306245,1.52745137053, -1.47231680411,-1.26446031412,1.5178976796, -1.47231680411,-1.22981756579,1.50456058712, -1.47231680411,-1.19517481746,1.48819110583, -1.47231680411,-1.16053206913,1.46935477607, -1.47231680411,-1.12588932079,1.44717523647, -1.47231680411,-1.09124657246,1.41867411229, -1.47231680411,-1.05660382413,1.38986678381, -1.47231680411,-1.0219610758,1.36077959971, -1.47231680411,-0.987318327465,1.33143385893, -1.47231680411,-0.952675579133,1.30184196756, -1.47231680411,-0.918032830801,1.272041393, -1.47231680411,-0.883390082469,1.24200025159, -1.47231680411,-0.848747334136,1.21176914447, -1.47231680411,-0.814104585804,1.18133932148, -1.47231680411,-0.779461837472,1.15073599363, -1.47231680411,-0.74481908914,1.1199523527, -1.47231680411,-0.710176340808,1.08900639258, -1.47231680411,-0.675533592476,1.05790152637, -1.47231680411,-0.640890844144,1.0266383882, -1.47231680411,-0.606248095812,0.99524385361, -1.47231680411,-0.57160534748,0.963696610762, -1.47231680411,-0.536962599148,0.932010560789, -1.47231680411,-0.502319850815,0.900194807676, -1.47231680411,-0.467677102483,0.868265509117, -1.47231680411,-0.433034354151,0.836187985816, -1.47231680411,-0.398391605819,0.804005001339, -1.47231680411,-0.363748857487,0.771687831795, -1.47231680411,-0.329106109155,0.7392541668, -1.47231680411,-0.294463360823,0.706713912087, -1.47231680411,-0.259820612491,0.674055448611, -1.47231680411,-0.225177864159,0.64128806539, -1.47231680411,-0.190535115827,0.60840927837, -1.47231680411,-0.155892367494,0.575424014641, -1.47231680411,-0.121249619162,0.542330274623, -1.47231680411,-0.0866068708302,0.5091310803, -1.47231680411,-0.0519641224981,0.475829305088, -1.47231680411,-0.017321374166,0.442432764674, -1.47231680411,0.017321374166,0.408919829971, -1.47231680411,0.0519641224981,0.376087902811, -1.47231680411,0.0866068708302,0.343272309913, -1.47231680411,0.121249619162,0.310149745381, -1.47231680411,0.155892367494,0.276606504195, -1.47231680411,0.190535115827,0.24238467889, -1.47231680411,0.225177864159,0.208090995493, -1.47231680411,0.259820612491,0.173722998464, -1.47231680411,0.294463360823,0.139289505201, -1.47231680411,0.329106109155,0.10478727527, -1.47231680411,0.363748857487,0.0702182124844, -1.47231680411,0.398391605819,0.0355921550798, -1.47231680411,0.433034354151,0.000912615489587, -1.47231680411,0.467677102483,-0.0338282223607, -1.47231680411,0.502319850815,-0.0686341297866, -1.47231680411,0.536962599148,-0.103473195831, -1.47231680411,0.57160534748,-0.138382525722, -1.47231680411,0.606248095812,-0.173329691916, -1.47231680411,0.640890844144,-0.208325878989, -1.47231680411,0.675533592476,-0.243364910111, -1.47231680411,0.710176340808,-0.27844634838, -1.47231680411,0.74481908914,-0.31357200127, -1.47231680411,0.779461837472,-0.348736983404, -1.47231680411,0.814104585804,-0.383937955686, -1.47231680411,0.848747334136,-0.419178783806, -1.47231680411,0.883390082469,-0.454460805383, -1.47231680411,0.918032830801,-0.489766216734, -1.47231680411,0.952675579133,-0.525114556468, -1.47231680411,0.987318327465,-0.5604927809, -1.47231680411,1.0219610758,-0.595903145283, -1.47231680411,1.05660382413,-0.631341801642, -1.47231680411,1.09124657246,-0.66681161849, -1.47231680411,1.12588932079,-0.702307141639, -1.47231680411,1.16053206913,-0.737833729426, -1.47231680411,1.19517481746,-0.773384337114, -1.47231680411,1.22981756579,-0.808963736943, -1.47231680411,1.26446031412,-0.844572259278, -1.47231680411,1.29910306245,-0.88019612291, -1.47231680411,1.33374581079,-0.915855258434, -1.47231680411,1.36838855912,-0.95152338983, -1.47231680411,1.40303130745,-0.987223371433, -1.47231680411,1.43767405578,-1.02295451428, -1.47231680411,1.47231680411,-1.05868422677, -1.47231680411,1.50695955245,-1.09445771387, -1.47231680411,1.54160230078,-1.13024295699, -1.47231680411,1.57624504911,-1.16604813148, -1.47231680411,1.61088779744,-1.20187182001, -1.47231680411,1.64553054577,-1.23771484688, -1.47231680411,1.68017329411,-1.27357904587, -1.47231680411,1.71481604244,-1.30946022361, -1.50695955245,-1.71481604244,1.74033824658, -1.50695955245,-1.68017329411,1.72801051907, -1.50695955245,-1.64553054577,1.71290239208, -1.50695955245,-1.61088779744,1.69555678847, -1.50695955245,-1.57624504911,1.67646967953, -1.50695955245,-1.54160230078,1.65580283371, -1.50695955245,-1.50695955245,1.63393555231, -1.50695955245,-1.47231680411,1.61091501092, -1.50695955245,-1.43767405578,1.58697202956, -1.50695955245,-1.40303130745,1.56218355861, -1.50695955245,-1.36838855912,1.53665323434, -1.50695955245,-1.33374581079,1.53644997618, -1.50695955245,-1.29910306245,1.53182995739, -1.50695955245,-1.26446031412,1.52227835493, -1.50695955245,-1.22981756579,1.50894328358, -1.50695955245,-1.19517481746,1.49256933552, -1.50695955245,-1.16053206913,1.47373550445, -1.50695955245,-1.12588932079,1.45139903852, -1.50695955245,-1.09124657246,1.42290803718, -1.50695955245,-1.05660382413,1.39409853526, -1.50695955245,-1.0219610758,1.36502580866, -1.50695955245,-0.987318327465,1.33568881088, -1.50695955245,-0.952675579133,1.30609268761, -1.50695955245,-0.918032830801,1.27628086209, -1.50695955245,-0.883390082469,1.24626610849, -1.50695955245,-0.848747334136,1.21604014948, -1.50695955245,-0.814104585804,1.18561207888, -1.50695955245,-0.779461837472,1.15501327238, -1.50695955245,-0.74481908914,1.12423459873, -1.50695955245,-0.710176340808,1.0932914663, -1.50695955245,-0.675533592476,1.06219196327, -1.50695955245,-0.640890844144,1.03094251894, -1.50695955245,-0.606248095812,0.999546710222, -1.50695955245,-0.57160534748,0.968010528935, -1.50695955245,-0.536962599148,0.936332128626, -1.50695955245,-0.502319850815,0.904524857474, -1.50695955245,-0.467677102483,0.872582279058, -1.50695955245,-0.433034354151,0.840526731049, -1.50695955245,-0.398391605819,0.808344527853, -1.50695955245,-0.363748857487,0.776032800453, -1.50695955245,-0.329106109155,0.743605608684, -1.50695955245,-0.294463360823,0.711066103087, -1.50695955245,-0.259820612491,0.678413446291, -1.50695955245,-0.225177864159,0.645651220526, -1.50695955245,-0.190535115827,0.612778079821, -1.50695955245,-0.155892367494,0.579797329834, -1.50695955245,-0.121249619162,0.546707655861, -1.50695955245,-0.0866068708302,0.513517801913, -1.50695955245,-0.0519641224981,0.480217804021, -1.50695955245,-0.017321374166,0.446811114401, -1.50695955245,0.017321374166,0.413320142052, -1.50695955245,0.0519641224981,0.380473163713, -1.50695955245,0.0866068708302,0.347649158537, -1.50695955245,0.121249619162,0.314530247437, -1.50695955245,0.155892367494,0.281019804771, -1.50695955245,0.190535115827,0.246801128321, -1.50695955245,0.225177864159,0.212505016289, -1.50695955245,0.259820612491,0.178139267127, -1.50695955245,0.294463360823,0.143706717325, -1.50695955245,0.329106109155,0.109200268416, -1.50695955245,0.363748857487,0.0746386634517, -1.50695955245,0.398391605819,0.0400070377683, -1.50695955245,0.433034354151,0.00532814704533, -1.50695955245,0.467677102483,-0.0294211038347, -1.50695955245,0.502319850815,-0.064221930062, -1.50695955245,0.536962599148,-0.0990733326753, -1.50695955245,0.57160534748,-0.133973979787, -1.50695955245,0.606248095812,-0.168914350985, -1.50695955245,0.640890844144,-0.203909594632, -1.50695955245,0.675533592476,-0.238952429236, -1.50695955245,0.710176340808,-0.274036203082, -1.50695955245,0.74481908914,-0.309160710085, -1.50695955245,0.779461837472,-0.344323458063, -1.50695955245,0.814104585804,-0.37953137066, -1.50695955245,0.848747334136,-0.41477236091, -1.50695955245,0.883390082469,-0.450051363774, -1.50695955245,0.918032830801,-0.48536445582, -1.50695955245,0.952675579133,-0.5207075374, -1.50695955245,0.987318327465,-0.556077581901, -1.50695955245,1.0219610758,-0.591502497896, -1.50695955245,1.05660382413,-0.626935682009, -1.50695955245,1.09124657246,-0.662403693712, -1.50695955245,1.12588932079,-0.69790260618, -1.50695955245,1.16053206913,-0.733429670616, -1.50695955245,1.19517481746,-0.768981957793, -1.50695955245,1.22981756579,-0.804561408851, -1.50695955245,1.26446031412,-0.840169023305, -1.50695955245,1.29910306245,-0.87579866321, -1.50695955245,1.33374581079,-0.9114522797, -1.50695955245,1.36838855912,-0.947131885499, -1.50695955245,1.40303130745,-0.982826462037, -1.50695955245,1.43767405578,-1.01855563786, -1.50695955245,1.47231680411,-1.0542964251, -1.50695955245,1.50695955245,-1.09006085941, -1.50695955245,1.54160230078,-1.12584508511, -1.50695955245,1.57624504911,-1.16165054127, -1.50695955245,1.61088779744,-1.19747560446, -1.50695955245,1.64553054577,-1.23332182247, -1.50695955245,1.68017329411,-1.26918204543, -1.50695955245,1.71481604244,-1.30506736004, -1.54160230078,-1.71481604244,1.74437988687, -1.54160230078,-1.68017329411,1.7319850578, -1.54160230078,-1.64553054577,1.71688373055, -1.54160230078,-1.61088779744,1.69958931965, -1.54160230078,-1.57624504911,1.68045560057, -1.54160230078,-1.54160230078,1.65983766817, -1.54160230078,-1.50695955245,1.63792282151, -1.54160230078,-1.47231680411,1.61489539398, -1.54160230078,-1.43767405578,1.5909602573, -1.54160230078,-1.40303130745,1.56617648945, -1.54160230078,-1.36838855912,1.54069150449, -1.54160230078,-1.33374581079,1.54078339908, -1.54160230078,-1.29910306245,1.536168205, -1.54160230078,-1.26446031412,1.52661564834, -1.54160230078,-1.22981756579,1.51327417057, -1.54160230078,-1.19517481746,1.49690572271, -1.54160230078,-1.16053206913,1.47807226602, -1.54160230078,-1.12588932079,1.45558326751, -1.54160230078,-1.09124657246,1.42709112679, -1.54160230078,-1.05660382413,1.39828500096, -1.54160230078,-1.0219610758,1.36922060339, -1.54160230078,-0.987318327465,1.33988379996, -1.54160230078,-0.952675579133,1.31030384677, -1.54160230078,-0.918032830801,1.2805072151, -1.54160230078,-0.883390082469,1.25047611371, -1.54160230078,-0.848747334136,1.22025280383, -1.54160230078,-0.814104585804,1.18983987763, -1.54160230078,-0.779461837472,1.15924574582, -1.54160230078,-0.74481908914,1.12847117582, -1.54160230078,-0.710176340808,1.09754237067, -1.54160230078,-0.675533592476,1.06644115888, -1.54160230078,-0.640890844144,1.03520042855, -1.54160230078,-0.606248095812,1.00381064124, -1.54160230078,-0.57160534748,0.972276707221, -1.54160230078,-0.536962599148,0.940602912866, -1.54160230078,-0.502319850815,0.908798940063, -1.54160230078,-0.467677102483,0.876863022592, -1.54160230078,-0.433034354151,0.844806177543, -1.54160230078,-0.398391605819,0.812630158949, -1.54160230078,-0.363748857487,0.780330045171, -1.54160230078,-0.329106109155,0.747906395958, -1.54160230078,-0.294463360823,0.715374705566, -1.54160230078,-0.259820612491,0.682728947705, -1.54160230078,-0.225177864159,0.649967899861, -1.54160230078,-0.190535115827,0.617103308513, -1.54160230078,-0.155892367494,0.584124032012, -1.54160230078,-0.121249619162,0.551039630079, -1.54160230078,-0.0866068708302,0.517851250082, -1.54160230078,-0.0519641224981,0.484550687924, -1.54160230078,-0.017321374166,0.451151980048, -1.54160230078,0.017321374166,0.417665953651, -1.54160230078,0.0519641224981,0.384811412131, -1.54160230078,0.0866068708302,0.351987401426, -1.54160230078,0.121249619162,0.318864633549, -1.54160230078,0.155892367494,0.285386481197, -1.54160230078,0.190535115827,0.251167721535, -1.54160230078,0.225177864159,0.216870452744, -1.54160230078,0.259820612491,0.182506967213, -1.54160230078,0.294463360823,0.14807393657, -1.54160230078,0.329106109155,0.113571645412, -1.54160230078,0.363748857487,0.0790062109311, -1.54160230078,0.398391605819,0.0443769667923, -1.54160230078,0.433034354151,0.00968843083824, -1.54160230078,0.467677102483,-0.0250500799627, -1.54160230078,0.502319850815,-0.0598489347211, -1.54160230078,0.536962599148,-0.0947018808081, -1.54160230078,0.57160534748,-0.129601309552, -1.54160230078,0.606248095812,-0.164549516401, -1.54160230078,0.640890844144,-0.199543823977, -1.54160230078,0.675533592476,-0.234585310952, -1.54160230078,0.710176340808,-0.269669844101, -1.54160230078,0.74481908914,-0.304797525425, -1.54160230078,0.779461837472,-0.339960356467, -1.54160230078,0.814104585804,-0.375166647178, -1.54160230078,0.848747334136,-0.410405660824, -1.54160230078,0.883390082469,-0.44568987087, -1.54160230078,0.918032830801,-0.481001585314, -1.54160230078,0.952675579133,-0.516342235048, -1.54160230078,0.987318327465,-0.551725504191, -1.54160230078,1.0219610758,-0.587139998099, -1.54160230078,1.05660382413,-0.622577144881, -1.54160230078,1.09124657246,-0.658047692388, -1.54160230078,1.12588932079,-0.693544957341, -1.54160230078,1.16053206913,-0.729070951969, -1.54160230078,1.19517481746,-0.764624445575, -1.54160230078,1.22981756579,-0.80020515685, -1.54160230078,1.26446031412,-0.835815362925, -1.54160230078,1.29910306245,-0.871442079048, -1.54160230078,1.33374581079,-0.907098195969, -1.54160230078,1.36838855912,-0.942780193703, -1.54160230078,1.40303130745,-0.978472044655, -1.54160230078,1.43767405578,-1.01420469814, -1.54160230078,1.47231680411,-1.04994732736, -1.54160230078,1.50695955245,-1.08570988147, -1.54160230078,1.54160230078,-1.12149683916, -1.54160230078,1.57624504911,-1.15730332652, -1.54160230078,1.61088779744,-1.1931287266, -1.54160230078,1.64553054577,-1.22897387169, -1.54160230078,1.68017329411,-1.26483663509, -1.54160230078,1.71481604244,-1.30071783057, -1.57624504911,-1.71481604244,1.74830585691, -1.57624504911,-1.68017329411,1.73596116337, -1.57624504911,-1.64553054577,1.72087030289, -1.57624504911,-1.61088779744,1.70352491269, -1.57624504911,-1.57624504911,1.6843923242, -1.57624504911,-1.54160230078,1.66377707777, -1.57624504911,-1.50695955245,1.64186419484, -1.57624504911,-1.47231680411,1.61888596624, -1.57624504911,-1.43767405578,1.59494580406, -1.57624504911,-1.40303130745,1.57016737969, -1.57624504911,-1.36838855912,1.54464089708, -1.57624504911,-1.33374581079,1.54507112047, -1.57624504911,-1.29910306245,1.54045647336, -1.57624504911,-1.26446031412,1.53090497523, -1.57624504911,-1.22981756579,1.51756599707, -1.57624504911,-1.19517481746,1.50119474208, -1.57624504911,-1.16053206913,1.48236587178, -1.57624504911,-1.12588932079,1.4597133454, -1.57624504911,-1.09124657246,1.43122470572, -1.57624504911,-1.05660382413,1.40243726903, -1.57624504911,-1.0219610758,1.37336533723, -1.57624504911,-0.987318327465,1.34404763276, -1.57624504911,-0.952675579133,1.31447607371, -1.57624504911,-0.918032830801,1.28466531966, -1.57624504911,-0.883390082469,1.2546486269, -1.57624504911,-0.848747334136,1.2244307383, -1.57624504911,-0.814104585804,1.19402083942, -1.57624504911,-0.779461837472,1.16343106373, -1.57624504911,-0.74481908914,1.13266688632, -1.57624504911,-0.710176340808,1.10174157971, -1.57624504911,-0.675533592476,1.07064981755, -1.57624504911,-0.640890844144,1.03941311939, -1.57624504911,-0.606248095812,1.00802207089, -1.57624504911,-0.57160534748,0.976496235717, -1.57624504911,-0.536962599148,0.944833835077, -1.57624504911,-0.502319850815,0.913029931366, -1.57624504911,-0.467677102483,0.881108101911, -1.57624504911,-0.433034354151,0.849059064431, -1.57624504911,-0.398391605819,0.816881485694, -1.57624504911,-0.363748857487,0.78458276236, -1.57624504911,-0.329106109155,0.752165262784, -1.57624504911,-0.294463360823,0.719634667894, -1.57624504911,-0.259820612491,0.686992364408, -1.57624504911,-0.225177864159,0.654239083675, -1.57624504911,-0.190535115827,0.621376246997, -1.57624504911,-0.155892367494,0.588405103338, -1.57624504911,-0.121249619162,0.555320513285, -1.57624504911,-0.0866068708302,0.522140575509, -1.57624504911,-0.0519641224981,0.488847782392, -1.57624504911,-0.017321374166,0.455455766403, -1.57624504911,0.017321374166,0.42195872542, -1.57624504911,0.0519641224981,0.389088692171, -1.57624504911,0.0866068708302,0.356287515197, -1.57624504911,0.121249619162,0.323153849892, -1.57624504911,0.155892367494,0.289707489371, -1.57624504911,0.190535115827,0.255488507258, -1.57624504911,0.225177864159,0.221191807495, -1.57624504911,0.259820612491,0.186827175611, -1.57624504911,0.294463360823,0.152392329276, -1.57624504911,0.329106109155,0.117890650018, -1.57624504911,0.363748857487,0.0833289600297, -1.57624504911,0.398391605819,0.0487027912148, -1.57624504911,0.433034354151,0.0140139879534, -1.57624504911,0.467677102483,-0.0207261449953, -1.57624504911,0.502319850815,-0.0555280584382, -1.57624504911,0.536962599148,-0.0903749426065, -1.57624504911,0.57160534748,-0.125283140701, -1.57624504911,0.606248095812,-0.160229495939, -1.57624504911,0.640890844144,-0.195224697919, -1.57624504911,0.675533592476,-0.230265851396, -1.57624504911,0.710176340808,-0.265350265029, -1.57624504911,0.74481908914,-0.300476910533, -1.57624504911,0.779461837472,-0.335646482708, -1.57624504911,0.814104585804,-0.370849472783, -1.57624504911,0.848747334136,-0.406093262862, -1.57624504911,0.883390082469,-0.441375284439, -1.57624504911,0.918032830801,-0.476687827147, -1.57624504911,0.952675579133,-0.512030733421, -1.57624504911,0.987318327465,-0.547404227626, -1.57624504911,1.0219610758,-0.58281521702, -1.57624504911,1.05660382413,-0.618263018521, -1.57624504911,1.09124657246,-0.653734635794, -1.57624504911,1.12588932079,-0.689233216664, -1.57624504911,1.16053206913,-0.724760328392, -1.57624504911,1.19517481746,-0.760315280993, -1.57624504911,1.22981756579,-0.795899216359, -1.57624504911,1.26446031412,-0.831503973456, -1.57624504911,1.29910306245,-0.867133104613, -1.57624504911,1.33374581079,-0.902791901055, -1.57624504911,1.36838855912,-0.938467773116, -1.57624504911,1.40303130745,-0.974171853746, -1.57624504911,1.43767405578,-1.00990064663, -1.57624504911,1.47231680411,-1.04563645933, -1.57624504911,1.50695955245,-1.08140597138, -1.57624504911,1.54160230078,-1.11719202579, -1.57624504911,1.57624504911,-1.15299927345, -1.57624504911,1.61088779744,-1.18882646167, -1.57624504911,1.64553054577,-1.22467012253, -1.57624504911,1.68017329411,-1.26053642722, -1.57624504911,1.71481604244,-1.29641696941, -1.61088779744,-1.71481604244,1.75224720725, -1.61088779744,-1.68017329411,1.73986079333, -1.61088779744,-1.64553054577,1.72475940226, -1.61088779744,-1.61088779744,1.70746634136, -1.61088779744,-1.57624504911,1.68833297096, -1.61088779744,-1.54160230078,1.66766870369, -1.61088779744,-1.50695955245,1.64580644018, -1.61088779744,-1.47231680411,1.62278248008, -1.61088779744,-1.43767405578,1.59884301592, -1.61088779744,-1.40303130745,1.57405957346, -1.61088779744,-1.36838855912,1.54853939266, -1.61088779744,-1.33374581079,1.5493189856, -1.61088779744,-1.29910306245,1.54470098308, -1.61088779744,-1.26446031412,1.53514742535, -1.61088779744,-1.22981756579,1.52180809387, -1.61088779744,-1.19517481746,1.50543744674, -1.61088779744,-1.16053206913,1.48661044539, -1.61088779744,-1.12588932079,1.46381320374, -1.61088779744,-1.09124657246,1.43532721809, -1.61088779744,-1.05660382413,1.40653589664, -1.61088779744,-1.0219610758,1.37747273001, -1.61088779744,-0.987318327465,1.3481540726, -1.61088779744,-0.952675579133,1.31857944595, -1.61088779744,-0.918032830801,1.28879293097, -1.61088779744,-0.883390082469,1.25877802627, -1.61088779744,-0.848747334136,1.22857193357, -1.61088779744,-0.814104585804,1.19816711282, -1.61088779744,-0.779461837472,1.16757997659, -1.61088779744,-0.74481908914,1.13681870535, -1.61088779744,-0.710176340808,1.10589482091, -1.61088779744,-0.675533592476,1.07481354698, -1.61088779744,-0.640890844144,1.04357563295, -1.61088779744,-0.606248095812,1.01218933027, -1.61088779744,-0.57160534748,0.980670166371, -1.61088779744,-0.536962599148,0.949016077958, -1.61088779744,-0.502319850815,0.917218660481, -1.61088779744,-0.467677102483,0.885304945183, -1.61088779744,-0.433034354151,0.853254888625, -1.61088779744,-0.398391605819,0.82108102664, -1.61088779744,-0.363748857487,0.788789771497, -1.61088779744,-0.329106109155,0.756378060496, -1.61088779744,-0.294463360823,0.7238557465, -1.61088779744,-0.259820612491,0.691218535107, -1.61088779744,-0.225177864159,0.658469682572, -1.61088779744,-0.190535115827,0.625607576116, -1.61088779744,-0.155892367494,0.592636014898, -1.61088779744,-0.121249619162,0.559558043958, -1.61088779744,-0.0866068708302,0.526379033025, -1.61088779744,-0.0519641224981,0.493091514083, -1.61088779744,-0.017321374166,0.459701768708, -1.61088779744,0.017321374166,0.426212311071, -1.61088779744,0.0519641224981,0.393336191993, -1.61088779744,0.0866068708302,0.360515541082, -1.61088779744,0.121249619162,0.327386649336, -1.61088779744,0.155892367494,0.293981366015, -1.61088779744,0.190535115827,0.259761591455, -1.61088779744,0.225177864159,0.225469909444, -1.61088779744,0.259820612491,0.191104904069, -1.61088779744,0.294463360823,0.156667726099, -1.61088779744,0.329106109155,0.122169783916, -1.61088779744,0.363748857487,0.0876011673687, -1.61088779744,0.398391605819,0.0529774906206, -1.61088779744,0.433034354151,0.0182864407595, -1.61088779744,0.467677102483,-0.0164482854438, -1.61088779744,0.502319850815,-0.0512579741742, -1.61088779744,0.536962599148,-0.0861072490347, -1.61088779744,0.57160534748,-0.12099948661, -1.61088779744,0.606248095812,-0.155955613653, -1.61088779744,0.640890844144,-0.190951227342, -1.61088779744,0.675533592476,-0.225992998874, -1.61088779744,0.710176340808,-0.261080162211, -1.61088779744,0.74481908914,-0.296206913945, -1.61088779744,0.779461837472,-0.331375460239, -1.61088779744,0.814104585804,-0.3665788011, -1.61088779744,0.848747334136,-0.401818910714, -1.61088779744,0.883390082469,-0.437097796239, -1.61088779744,0.918032830801,-0.472411561836, -1.61088779744,0.952675579133,-0.507759126917, -1.61088779744,0.987318327465,-0.543143436161, -1.61088779744,1.0219610758,-0.57856307966, -1.61088779744,1.05660382413,-0.613996659887, -1.61088779744,1.09124657246,-0.649468775915, -1.61088779744,1.12588932079,-0.684969423838, -1.61088779744,1.16053206913,-0.720496715568, -1.61088779744,1.19517481746,-0.756053363204, -1.61088779744,1.22981756579,-0.791632249544, -1.61088779744,1.26446031412,-0.827240158494, -1.61088779744,1.29910306245,-0.862870684526, -1.61088779744,1.33374581079,-0.898523759631, -1.61088779744,1.36838855912,-0.934204301169, -1.61088779744,1.40303130745,-0.969912237448, -1.61088779744,1.43767405578,-1.00562793962, -1.61088779744,1.47231680411,-1.04138067672, -1.61088779744,1.50695955245,-1.07714603654, -1.61088779744,1.54160230078,-1.1129347778, -1.61088779744,1.57624504911,-1.1487434839, -1.61088779744,1.61088779744,-1.18456793487, -1.61088779744,1.64553054577,-1.22041391739, -1.61088779744,1.68017329411,-1.25628050925, -1.61088779744,1.71481604244,-1.29216365076, -1.64553054577,-1.71481604244,1.75609575195, -1.64553054577,-1.68017329411,1.7437431159, -1.64553054577,-1.64553054577,1.7286581705, -1.64553054577,-1.61088779744,1.71131059935, -1.64553054577,-1.57624504911,1.69217913617, -1.64553054577,-1.54160230078,1.67156739042, -1.64553054577,-1.50695955245,1.6496555947, -1.64553054577,-1.47231680411,1.62668238759, -1.64553054577,-1.43767405578,1.60269305811, -1.64553054577,-1.40303130745,1.5779124587, -1.64553054577,-1.36838855912,1.55238844367, -1.64553054577,-1.33374581079,1.55351802881, -1.64553054577,-1.29910306245,1.5488976912, -1.64553054577,-1.26446031412,1.53934919098, -1.64553054577,-1.22981756579,1.52601266659, -1.64553054577,-1.19517481746,1.5096408058, -1.64553054577,-1.16053206913,1.49080716867, -1.64553054577,-1.12588932079,1.46786105589, -1.64553054577,-1.09124657246,1.43938203226, -1.64553054577,-1.05660382413,1.41060181575, -1.64553054577,-1.0219610758,1.38154334816, -1.64553054577,-0.987318327465,1.35221780574, -1.64553054577,-0.952675579133,1.32266129458, -1.64553054577,-0.918032830801,1.29287286157, -1.64553054577,-0.883390082469,1.26286520571, -1.64553054577,-0.848747334136,1.23265823455, -1.64553054577,-0.814104585804,1.20225739834, -1.64553054577,-0.779461837472,1.17168351282, -1.64553054577,-0.74481908914,1.14092755965, -1.64553054577,-0.710176340808,1.11000741592, -1.64553054577,-0.675533592476,1.07892834921, -1.64553054577,-0.640890844144,1.04770088292, -1.64553054577,-0.606248095812,1.01632013474, -1.64553054577,-0.57160534748,0.98479951479, -1.64553054577,-0.536962599148,0.953150837146, -1.64553054577,-0.502319850815,0.921365933807, -1.64553054577,-0.467677102483,0.889442035147, -1.64553054577,-0.433034354151,0.857410191917, -1.64553054577,-0.398391605819,0.825247556667, -1.64553054577,-0.363748857487,0.792958196693, -1.64553054577,-0.329106109155,0.760548204149, -1.64553054577,-0.294463360823,0.728030090378, -1.64553054577,-0.259820612491,0.695398033607, -1.64553054577,-0.225177864159,0.662648733594, -1.64553054577,-0.190535115827,0.629798034806, -1.64553054577,-0.155892367494,0.596828761685, -1.64553054577,-0.121249619162,0.563759382195, -1.64553054577,-0.0866068708302,0.530575362736, -1.64553054577,-0.0519641224981,0.497292099906, -1.64553054577,-0.017321374166,0.463912382848, -1.64553054577,0.017321374166,0.430415088916, -1.64553054577,0.0519641224981,0.397539574274, -1.64553054577,0.0866068708302,0.364724671112, -1.64553054577,0.121249619162,0.331600417284, -1.64553054577,0.155892367494,0.298202135008, -1.64553054577,0.190535115827,0.263993601262, -1.64553054577,0.225177864159,0.229699001061, -1.64553054577,0.259820612491,0.19533702418, -1.64553054577,0.294463360823,0.160900920653, -1.64553054577,0.329106109155,0.126398719459, -1.64553054577,0.363748857487,0.0918370494992, -1.64553054577,0.398391605819,0.0572100431732, -1.64553054577,0.433034354151,0.022525444103, -1.64553054577,0.467677102483,-0.0122263447739, -1.64553054577,0.502319850815,-0.0470245556133, -1.64553054577,0.536962599148,-0.0818664829062, -1.64553054577,0.57160534748,-0.116768206818, -1.64553054577,0.606248095812,-0.151724728487, -1.64553054577,0.640890844144,-0.186722454345, -1.64553054577,0.675533592476,-0.22176573679, -1.64553054577,0.710176340808,-0.256851106832, -1.64553054577,0.74481908914,-0.291977668305, -1.64553054577,0.779461837472,-0.327146501327, -1.64553054577,0.814104585804,-0.362353620547, -1.64553054577,0.848747334136,-0.397596596987, -1.64553054577,0.883390082469,-0.432874211758, -1.64553054577,0.918032830801,-0.46819284933, -1.64553054577,0.952675579133,-0.503539020862, -1.64553054577,0.987318327465,-0.538912176278, -1.64553054577,1.0219610758,-0.574329017862, -1.64553054577,1.05660382413,-0.609774915042, -1.64553054577,1.09124657246,-0.645246599169, -1.64553054577,1.12588932079,-0.68074662139, -1.64553054577,1.16053206913,-0.716275579325, -1.64553054577,1.19517481746,-0.751833474111, -1.64553054577,1.22981756579,-0.787413608162, -1.64553054577,1.26446031412,-0.823022836618, -1.64553054577,1.29910306245,-0.858653798868, -1.64553054577,1.33374581079,-0.894310050419, -1.64553054577,1.36838855912,-0.929988612216, -1.64553054577,1.40303130745,-0.965692539364, -1.64553054577,1.43767405578,-1.00141495435, -1.64553054577,1.47231680411,-1.03716146002, -1.64553054577,1.50695955245,-1.07293326283, -1.64553054577,1.54160230078,-1.10871917868, -1.64553054577,1.57624504911,-1.14452906452, -1.64553054577,1.61088779744,-1.18035573535, -1.64553054577,1.64553054577,-1.21620417208, -1.64553054577,1.68017329411,-1.25206799545, -1.64553054577,1.71481604244,-1.2879509412, -1.68017329411,-1.71481604244,1.75994188768, -1.68017329411,-1.68017329411,1.74760771399, -1.68017329411,-1.64553054577,1.73246156848, -1.68017329411,-1.61088779744,1.71516325053, -1.68017329411,-1.57624504911,1.69603203703, -1.68017329411,-1.54160230078,1.67542142685, -1.68017329411,-1.50695955245,1.65350915885, -1.68017329411,-1.47231680411,1.63048902104, -1.68017329411,-1.43767405578,1.60655255308, -1.68017329411,-1.40303130745,1.58177273499, -1.68017329411,-1.36838855912,1.55624619883, -1.68017329411,-1.33374581079,1.55767414124, -1.68017329411,-1.29910306245,1.55305734131, -1.68017329411,-1.26446031412,1.54350593905, -1.68017329411,-1.22981756579,1.53016946907, -1.68017329411,-1.19517481746,1.51379960978, -1.68017329411,-1.16053206913,1.49496357772, -1.68017329411,-1.12588932079,1.4718655298, -1.68017329411,-1.09124657246,1.44339035188, -1.68017329411,-1.05660382413,1.41462584031, -1.68017329411,-1.0219610758,1.38556677472, -1.68017329411,-0.987318327465,1.35625242223, -1.68017329411,-0.952675579133,1.32669193342, -1.68017329411,-0.918032830801,1.29690630161, -1.68017329411,-0.883390082469,1.26690512011, -1.68017329411,-0.848747334136,1.23671183375, -1.68017329411,-0.814104585804,1.20631462339, -1.68017329411,-0.779461837472,1.17573653663, -1.68017329411,-0.74481908914,1.14499075151, -1.68017329411,-0.710176340808,1.11407593583, -1.68017329411,-0.675533592476,1.08300523138, -1.68017329411,-0.640890844144,1.05178372632, -1.68017329411,-0.606248095812,1.0204083369, -1.68017329411,-0.57160534748,0.988900788617, -1.68017329411,-0.536962599148,0.957248337551, -1.68017329411,-0.502319850815,0.925472535819, -1.68017329411,-0.467677102483,0.893558523815, -1.68017329411,-0.433034354151,0.861525697967, -1.68017329411,-0.398391605819,0.829364292701, -1.68017329411,-0.363748857487,0.797086637872, -1.68017329411,-0.329106109155,0.764678881308, -1.68017329411,-0.294463360823,0.732161536979, -1.68017329411,-0.259820612491,0.699531936672, -1.68017329411,-0.225177864159,0.666792813447, -1.68017329411,-0.190535115827,0.633939404066, -1.68017329411,-0.155892367494,0.600978641568, -1.68017329411,-0.121249619162,0.56791257842, -1.68017329411,-0.0866068708302,0.534737649969, -1.68017329411,-0.0519641224981,0.501450391872, -1.68017329411,-0.017321374166,0.468067725517, -1.68017329411,0.017321374166,0.43458032188, -1.68017329411,0.0519641224981,0.40169974784, -1.68017329411,0.0866068708302,0.368881244087, -1.68017329411,0.121249619162,0.335747849741, -1.68017329411,0.155892367494,0.302357475337, -1.68017329411,0.190535115827,0.268179812491, -1.68017329411,0.225177864159,0.233886702801, -1.68017329411,0.259820612491,0.199524517097, -1.68017329411,0.294463360823,0.165088172164, -1.68017329411,0.329106109155,0.130589422204, -1.68017329411,0.363748857487,0.09602432842, -1.68017329411,0.398391605819,0.0613936910615, -1.68017329411,0.433034354151,0.0267133701585, -1.68017329411,0.467677102483,-0.00803750351726, -1.68017329411,0.502319850815,-0.0428399538161, -1.68017329411,0.536962599148,-0.0776827007187, -1.68017329411,0.57160534748,-0.112587909007, -1.68017329411,0.606248095812,-0.14753812679, -1.68017329411,0.640890844144,-0.182537450948, -1.68017329411,0.675533592476,-0.217580101671, -1.68017329411,0.710176340808,-0.252665935911, -1.68017329411,0.74481908914,-0.287792699006, -1.68017329411,0.779461837472,-0.322963849693, -1.68017329411,0.814104585804,-0.35816699054, -1.68017329411,0.848747334136,-0.393410756413, -1.68017329411,0.883390082469,-0.428694599309, -1.68017329411,0.918032830801,-0.464009878701, -1.68017329411,0.952675579133,-0.499357106988, -1.68017329411,0.987318327465,-0.534738926836, -1.68017329411,1.0219610758,-0.570147643382, -1.68017329411,1.05660382413,-0.605586756023, -1.68017329411,1.09124657246,-0.641067234866, -1.68017329411,1.12588932079,-0.676569835843, -1.68017329411,1.16053206913,-0.712099537313, -1.68017329411,1.19517481746,-0.74765484171, -1.68017329411,1.22981756579,-0.783237286624, -1.68017329411,1.26446031412,-0.818845180863, -1.68017329411,1.29910306245,-0.85448146158, -1.68017329411,1.33374581079,-0.890132807504, -1.68017329411,1.36838855912,-0.925819583483, -1.68017329411,1.40303130745,-0.961523803646, -1.68017329411,1.43767405578,-0.997245903601, -1.68017329411,1.47231680411,-1.03299499555, -1.68017329411,1.50695955245,-1.06876457964, -1.68017329411,1.54160230078,-1.10454920972, -1.68017329411,1.57624504911,-1.14035810324, -1.68017329411,1.61088779744,-1.1761888263, -1.68017329411,1.64553054577,-1.21203581901, -1.68017329411,1.68017329411,-1.24790282514, -1.68017329411,1.71481604244,-1.28378387822, -1.71481604244,-1.71481604244,1.7637504145, -1.71481604244,-1.68017329411,1.75136389801, -1.71481604244,-1.64553054577,1.73625333192, -1.71481604244,-1.61088779744,1.71897161478, -1.71481604244,-1.57624504911,1.69984336822, -1.71481604244,-1.54160230078,1.6791803579, -1.71481604244,-1.50695955245,1.65727073283, -1.71481604244,-1.47231680411,1.63429953353, -1.71481604244,-1.43767405578,1.61036530327, -1.71481604244,-1.40303130745,1.58558544071, -1.71481604244,-1.36838855912,1.56005977124, -1.71481604244,-1.33374581079,1.56178818975, -1.71481604244,-1.29910306245,1.55717103217, -1.71481604244,-1.26446031412,1.54762359538, -1.71481604244,-1.22981756579,1.53428492688, -1.71481604244,-1.19517481746,1.51791482085, -1.71481604244,-1.16053206913,1.49908038317, -1.71481604244,-1.12588932079,1.47583463588, -1.71481604244,-1.09124657246,1.44736951623, -1.71481604244,-1.05660382413,1.4185995288, -1.71481604244,-1.0219610758,1.3895441991, -1.71481604244,-0.987318327465,1.36024562459, -1.71481604244,-0.952675579133,1.33068716754, -1.71481604244,-0.918032830801,1.30091105739, -1.71481604244,-0.883390082469,1.27092406934, -1.71481604244,-0.848747334136,1.24071512637, -1.71481604244,-0.814104585804,1.21032871936, -1.71481604244,-0.779461837472,1.17976161635, -1.71481604244,-0.74481908914,1.14901288602, -1.71481604244,-0.710176340808,1.11810957521, -1.71481604244,-0.675533592476,1.08703524511, -1.71481604244,-0.640890844144,1.05581946196, -1.71481604244,-0.606248095812,1.02445482461, -1.71481604244,-0.57160534748,0.992951185499, -1.71481604244,-0.536962599148,0.961300252377, -1.71481604244,-0.502319850815,0.929528825977, -1.71481604244,-0.467677102483,0.897617453232, -1.71481604244,-0.433034354151,0.865587851968, -1.71481604244,-0.398391605819,0.833432530909, -1.71481604244,-0.363748857487,0.801164047027, -1.71481604244,-0.329106109155,0.768761572556, -1.71481604244,-0.294463360823,0.736253665089, -1.71481604244,-0.259820612491,0.70362762312, -1.71481604244,-0.225177864159,0.670891146399, -1.71481604244,-0.190535115827,0.638041687745, -1.71481604244,-0.155892367494,0.605086521427, -1.71481604244,-0.121249619162,0.572018811916, -1.71481604244,-0.0866068708302,0.538851936794, -1.71481604244,-0.0519641224981,0.505567217512, -1.71481604244,-0.017321374166,0.472189254628, -1.71481604244,0.017321374166,0.438708549301, -1.71481604244,0.0519641224981,0.405803821875, -1.71481604244,0.0866068708302,0.372986700843, -1.71481604244,0.121249619162,0.33986934551, -1.71481604244,0.155892367494,0.306472075988, -1.71481604244,0.190535115827,0.272323905785, -1.71481604244,0.225177864159,0.238033769308, -1.71481604244,0.259820612491,0.203668332105, -1.71481604244,0.294463360823,0.169234932276, -1.71481604244,0.329106109155,0.134731968032, -1.71481604244,0.363748857487,0.100170410672, -1.71481604244,0.398391605819,0.0655443954858, -1.71481604244,0.433034354151,0.0308515555329, -1.71481604244,0.467677102483,-0.00389189440696, -1.71481604244,0.502319850815,-0.0386906320212, -1.71481604244,0.536962599148,-0.0735395618279, -1.71481604244,0.57160534748,-0.108439859698, -1.71481604244,0.606248095812,-0.143394879383, -1.71481604244,0.640890844144,-0.178392861242, -1.71481604244,0.675533592476,-0.213438243381, -1.71481604244,0.710176340808,-0.248523743354, -1.71481604244,0.74481908914,-0.283651076301, -1.71481604244,0.779461837472,-0.318821541711, -1.71481604244,0.814104585804,-0.35403000944, -1.71481604244,0.848747334136,-0.389274829573, -1.71481604244,0.883390082469,-0.42455804413, -1.71481604244,0.918032830801,-0.4598720768, -1.71481604244,0.952675579133,-0.495224539729, -1.71481604244,0.987318327465,-0.530607971829, -1.71481604244,1.0219610758,-0.566017519629, -1.71481604244,1.05660382413,-0.601467524425, -1.71481604244,1.09124657246,-0.636932195431, -1.71481604244,1.12588932079,-0.672435219109, -1.71481604244,1.16053206913,-0.707964258303, -1.71481604244,1.19517481746,-0.743520701982, -1.71481604244,1.22981756579,-0.779102467167, -1.71481604244,1.26446031412,-0.814712199714, -1.71481604244,1.29910306245,-0.850345963716, -1.71481604244,1.33374581079,-0.886007672224, -1.71481604244,1.36838855912,-0.921686528922, -1.71481604244,1.40303130745,-0.957393237249, -1.71481604244,1.43767405578,-0.993119868433, -1.71481604244,1.47231680411,-1.0288635415, -1.71481604244,1.50695955245,-1.06464100224, -1.71481604244,1.54160230078,-1.10042153213, -1.71481604244,1.57624504911,-1.13623247766, -1.71481604244,1.61088779744,-1.17205960295, -1.71481604244,1.64553054577,-1.20790809088, -1.71481604244,1.68017329411,-1.24377446773, -1.71481604244,1.71481604244,-1.27966143928, \ No newline at end of file diff --git a/examples/data/symbolic.data b/examples/data/symbolic.data deleted file mode 100644 index 52d2b3bd..00000000 --- a/examples/data/symbolic.data +++ /dev/null @@ -1,101 +0,0 @@ -1,1,100, --5.000000,14400.000000, --4.900000,12712.338867, --4.800000,11191.949219, --4.700000,9825.367188, --4.600000,8599.964844, --4.500000,7503.890625, --4.400000,6526.055176, --4.300000,5656.094727, --4.200000,4884.331543, --4.100000,4201.761230, --4.000000,3600.000000, --3.900000,3071.265869, --3.800000,2608.348877, --3.700000,2204.584229, --3.600000,1853.818848, --3.500000,1550.390625, --3.400000,1289.097534, --3.300000,1065.173706, --3.200000,874.266724, --3.100000,712.409363, --3.000000,576.000000, --2.900000,461.777191, --2.800000,366.799072, --2.700000,288.422333, --2.600000,224.280518, --2.500000,172.265625, --2.400000,130.507797, --2.300000,97.357681, --2.200000,71.368713, --2.100000,51.279903, --1.900000,24.591679, --1.800000,16.257021, --1.700000,10.323371, --1.600000,6.230018, --1.500000,3.515625, --1.400000,1.806336, --1.300000,0.804609, --1.200000,0.278784, --1.100000,0.053361, --1.000000,0.000000, --0.900000,0.029241, --0.800000,0.082944, --0.700000,0.127449, --0.600000,0.147456, --0.500000,0.140625, --0.400000,0.112896, --0.300000,0.074529, --0.200000,0.036864, --0.100000,0.009801, -0.000000,0.000000, -0.100000,0.009801, -0.200000,0.036864, -0.300000,0.074529, -0.400000,0.112896, -0.500000,0.140625, -0.600000,0.147456, -0.700000,0.127449, -0.800000,0.082944, -0.900000,0.029241, -1.000000,0.000000, -1.100000,0.053361, -1.200000,0.278784, -1.300000,0.804609, -1.400000,1.806336, -1.500000,3.515625, -1.600000,6.230018, -1.700000,10.323371, -1.800000,16.257021, -1.900000,24.591679, -2.000000,36.000000, -2.100000,51.279903, -2.200000,71.368713, -2.300000,97.357681, -2.400000,130.507797, -2.500000,172.265625, -2.600000,224.280518, -2.700000,288.422333, -2.800000,366.799072, -2.900000,461.777191, -3.000000,576.000000, -3.100000,712.409363, -3.200000,874.266724, -3.300000,1065.173706, -3.400000,1289.097534, -3.500000,1550.390625, -3.600000,1853.818848, -3.700000,2204.584229, -3.800000,2608.348877, -3.900000,3071.265869, -4.000000,3600.000000, -4.100000,4201.761230, -4.200000,4884.331543, -4.300000,5656.094727, -4.400000,6526.055176, -4.500000,7503.890625, -4.600000,8599.964844, -4.700000,9825.367188, -4.800000,11191.949219, -4.900000,12712.338867, -5.000000,14400.000000, diff --git a/include/dcgp/algorithms/es4cgp.hpp b/include/dcgp/algorithms/es4cgp.hpp index 5e7cc4d9..a83c18c1 100644 --- a/include/dcgp/algorithms/es4cgp.hpp +++ b/include/dcgp/algorithms/es4cgp.hpp @@ -16,6 +16,34 @@ namespace dcgp { +/// Evolutionary Strategy for a Cartesian Genetic Program +/** + * + * \image html EvolutionaryStrategy.jpg "ES" + * + * Evolutionary strategies are popular global optimization meta-heuristics essentially based + * on the following simple pseudo-algorithm: + * + * @code{.unparsed} + * > Start from a population (pop) of dimension N + * > while i < gen + * > > Mutation: create a new population pop2 mutating N times the best individual + * > > Evaluate all new chromosomes in pop2 + * > > Reinsertion: set pop to contain the best N individuals taken from pop and pop2 + * @endcode + * + * The key to the success of such a search strategy is in the quality of its mutation operator. In the + * case of chrosomoses that encode a Cartesian Genetic Program (CGP), it makes sense to have mutation act + * on active genes only (that is on that part of the chromosome that is actually expressed in the + * final CGP / formula / model). This introduces a coupling between the optimization problem (say a symbolic + * regression problem) and its solution strategy which, although not preventing, makes the use of general purpose + * optimization algorithms inefficient (e.g. a generic evolutionary strategy would have a mutation operator which + * is agnostic of the existence of active genes). + * + * In this class we provide an evolutionary strategy tailored to solve problems of the class dcgp::symbolic_regression + * leveraging the kowledge on the genetic structure of Cartesian Genetic Programs (i.e. able to mutate only active + * genes). + */ class es4cgp { public: @@ -49,7 +77,16 @@ class es4cgp } } - // Algorithm evolve method + /// Algorithm evolve method + /** + * Evolves the population for a maximum number of generations + * + * @param pop population to be evolved + * @return evolved population + * @throws std::invalid_argument if a dcgp::symbolic_regression cannot be extracted from the problem + * @throws std::invalid_argument if the population size is smaller than 2 + * @throws std::invalid_argument if the number of objectives is not 1. + */ pagmo::population evolve(pagmo::population pop) const { const auto &prob = pop.get_problem(); @@ -115,7 +152,7 @@ class es4cgp // Every 50 lines print the column names if (count % 50u == 1u) { pagmo::print("\n", std::setw(7), "Gen:", std::setw(15), "Fevals:", std::setw(15), - "Best:", "\tConstants:", "\tFormula:\n"); + "Best:", "\tConstants:", "\tModel:\n"); } auto formula = udp_ptr->prettier(best_x); log_single_line(gen - 1, prob.get_fevals() - fevals0, best_f, best_x, formula, n_eph); @@ -185,7 +222,10 @@ class es4cgp return pop; } - // Sets the seed + /// Sets the seed + /** + * @param seed the seed controlling the algorithm stochastic behaviour + */ void set_seed(unsigned seed) { m_e.seed(seed); @@ -210,7 +250,7 @@ class es4cgp * * Example (verbosity 100): * @code{.unparsed} - * Gen: Fevals: Best: Constants: Formula: + * Gen: Fevals: Best: Constants: Model: * 0 0 4087.68 [3.52114] [0] ... * 100 400 324.845 [3.61414] [2*x0**4] ... * 200 800 324.845 [3.61414] [2*x0**4] ... @@ -254,7 +294,10 @@ class es4cgp return "ES for CGP: Evolutionary strategy for Cartesian Genetic Programming"; } - // Extra info + /// Extra info + /** + * @return a string containing extra info on the algorithm + */ std::string get_extra_info() const { std::ostringstream ss; diff --git a/include/dcgp/algorithms/gd4cgp.hpp b/include/dcgp/algorithms/gd4cgp.hpp index 1302a565..db9d6c80 100644 --- a/include/dcgp/algorithms/gd4cgp.hpp +++ b/include/dcgp/algorithms/gd4cgp.hpp @@ -48,7 +48,17 @@ class gd4cgp : public pagmo::not_population_based "The minimum learning rate must be strictly smaller than the initial learning rate."); } } - // Algorithm evolve method + + /// Algorithm evolve method + /** + * Evolves the population for a maximum number of generations + * + * @param pop population to be evolved + * @return evolved population + * @throws std::invalid_argument if a dcgp::symbolic_regression cannot be extracted from the problem + * @throws std::invalid_argument if no ephemeral constants are detected in the model. + * @throws std::invalid_argument if the number of objectives is not 1. + */ pagmo::population evolve(pagmo::population pop) const { const auto &prob = pop.get_problem(); @@ -212,7 +222,10 @@ class gd4cgp : public pagmo::not_population_based return "GD for CGP: gradient descent for Cartesian Genetic Programming"; } - // Extra info + /// Extra info + /** + * @return a string containing extra info on the algorithm + */ std::string get_extra_info() const { std::ostringstream ss; diff --git a/include/dcgp/algorithms/mes4cgp.hpp b/include/dcgp/algorithms/mes4cgp.hpp index 9f0d2538..99debb84 100644 --- a/include/dcgp/algorithms/mes4cgp.hpp +++ b/include/dcgp/algorithms/mes4cgp.hpp @@ -48,7 +48,16 @@ class mes4cgp } } - // Algorithm evolve method + /// Algorithm evolve method + /** + * Evolves the population for a maximum number of generations + * + * @param pop population to be evolved + * @return evolved population + * @throws std::invalid_argument if a dcgp::symbolic_regression cannot be extracted from the problem + * @throws std::invalid_argument if the population size is smaller than 2. + * @throws std::invalid_argument if the number of objectives is not 1. + */ pagmo::population evolve(pagmo::population pop) const { const auto &prob = pop.get_problem(); @@ -217,7 +226,10 @@ class mes4cgp return pop; } - // Sets the seed + /// Sets the seed + /** + * @param seed the seed controlling the algorithm stochastic behaviour + */ void set_seed(unsigned seed) { m_e.seed(seed); @@ -284,7 +296,10 @@ class mes4cgp return "M-ES for CGP: A memetic Evolutionary Strategy for Cartesian Genetic Programming"; } - // Extra info + /// Extra info + /** + * @return a string containing extra info on the algorithm + */ std::string get_extra_info() const { std::ostringstream ss; diff --git a/include/dcgp/algorithms/momes4cgp.hpp b/include/dcgp/algorithms/momes4cgp.hpp index 6f167405..4d7689bf 100644 --- a/include/dcgp/algorithms/momes4cgp.hpp +++ b/include/dcgp/algorithms/momes4cgp.hpp @@ -46,7 +46,17 @@ class momes4cgp } } - // Algorithm evolve method + + /// Algorithm evolve method + /** + * Evolves the population for a maximum number of generations + * + * @param pop population to be evolved + * @return evolved population + * @throws std::invalid_argument if a dcgp::symbolic_regression cannot be extracted from the problem + * @throws std::invalid_argument if the population size is smaller than 2. + * @throws std::invalid_argument if the number of objectives is smaller than 2. + */ pagmo::population evolve(pagmo::population pop) const { const auto &prob = pop.get_problem(); @@ -197,7 +207,10 @@ class momes4cgp return pop; } - // Sets the seed + /// Sets the seed + /** + * @param seed the seed controlling the algorithm stochastic behaviour + */ void set_seed(unsigned seed) { m_e.seed(seed); @@ -270,7 +283,10 @@ class momes4cgp return "MOM-ES for CGP: MultiObjective Memetic Evolutionary Strategy for Cartesian Genetic Programming"; } - // Extra info + /// Extra info + /** + * @return a string containing extra info on the algorithm + */ std::string get_extra_info() const { std::ostringstream ss; diff --git a/include/dcgp/gym.hpp b/include/dcgp/gym.hpp index 7ebca8d0..ef2aea7b 100644 --- a/include/dcgp/gym.hpp +++ b/include/dcgp/gym.hpp @@ -1,8 +1,13 @@ +#ifndef DCGP_GYM_H +#define DCGP_GYM_H + #include #include #include #include +#include + namespace dcgp { namespace gym @@ -12,56 +17,56 @@ namespace detail constexpr auto pi = boost::math::constants::pi(); constexpr auto e = boost::math::constants::e(); -typedef std::function &x)> multivariate; +typedef std::function &x)> multivar_func; // Standard Problems -multivariate koza_quintic +multivar_func koza_quintic = [](const std::vector &x) { return std::pow(x[0], 5) - 2 * std::pow(x[0], 3) + x[0]; }; // From: // Izzo, D., Biscani, F., & Mereta, A. (2017, April). // Differentiable genetic programming. -// In European Conference on Genetic Programming (pp. 35-51). Springer, Cham. -multivariate P1 = [](const std::vector &x) { return std::pow(x[0], 5) - pi * std::pow(x[0], 3) + x[0]; }; -multivariate P2 +// In European Conference on Genetic Programming (pp. 35-51). Springer. +multivar_func P1 = [](const std::vector &x) { return std::pow(x[0], 5) - pi * std::pow(x[0], 3) + x[0]; }; +multivar_func P2 = [](const std::vector &x) { return std::pow(x[0], 5) - pi * std::pow(x[0], 3) + 2. * pi / x[0]; }; -multivariate P3 +multivar_func P3 = [](const std::vector &x) { return (e * std::pow(x[0], 5) + std::pow(x[0], 3)) / (x[0] + 1.); }; -multivariate P4 = [](const std::vector &x) { return sin(pi * x[0]) + 1. / x[0]; }; -multivariate P5 = [](const std::vector &x) { return e * std::pow(x[0], 5) - pi * std::pow(x[0], 3) + x[0]; }; -multivariate P6 = [](const std::vector &x) { return (e * x[0] * x[0] - 1) / (pi * (x[0] + 2)); }; -multivariate P7 = [](const std::vector &x) { return std::cos(pi * x[0]) + std::sin(e * x[0]); }; +multivar_func P4 = [](const std::vector &x) { return sin(pi * x[0]) + 1. / x[0]; }; +multivar_func P5 = [](const std::vector &x) { return e * std::pow(x[0], 5) - pi * std::pow(x[0], 3) + x[0]; }; +multivar_func P6 = [](const std::vector &x) { return (e * x[0] * x[0] - 1) / (pi * (x[0] + 2)); }; +multivar_func P7 = [](const std::vector &x) { return std::cos(pi * x[0]) + std::sin(e * x[0]); }; // From: // Vladislavleva, Ekaterina J., Guido F. Smits, and Dick Den Hertog. // "Order of nonlinearity as a complexity measure for models generated by symbolic regression via pareto genetic -// programming." IEEE Transactions on Evolutionary Computation 13.2 (2008): 333-349. Generates data to test symbolic -// regression on 1D input-output cases. -multivariate vladi1 = [](const std::vector &x) { - return std::exp(-(x[0] - 1.) * (x[0] - 1.) / (1.2 + (x[1] - 2.5) * (x[1] - 2.5))); +// programming." IEEE Transactions on Evolutionary Computation 13.2 (2008): 333-349. +multivar_func kotanchek = [](const std::vector &x) { + return std::exp(-(x[0] - 1.) * (x[0] - 1.)) / (1.2 + (x[1] - 2.5) * (x[1] - 2.5)); }; -multivariate vladi2 = [](const std::vector &x) { +multivar_func salutowicz = [](const std::vector &x) { return std::exp(-x[0]) * x[0] * x[0] * x[0] * std::cos(x[0]) * std::sin(x[0]) * (std::cos(x[0]) * std::sin(x[0]) * std::sin(x[0]) - 1.); }; -multivariate vladi3 = [](const std::vector &x) { return vladi2(x) * (x[1] - 5.); }; -multivariate vladi4 = [](const std::vector &x) { +multivar_func salutowicz2d = [](const std::vector &x) { return salutowicz(x) * (x[1] - 5.); }; +multivar_func uball5d = [](const std::vector &x) { return 10. / (5. + std::pow((x[0] - 3.), 2) * std::pow((x[1] - 3.), 2) * std::pow((x[2] - 3.), 2) * std::pow((x[3] - 3.), 2) * std::pow((x[4] - 3.), 2)); }; -multivariate vladi5 +multivar_func ratpol3d = [](const std::vector &x) { return 30. * (x[0] - 1.) * (x[2] - 1.) / (x[1] * x[1] * (x[0] - 10.)); }; -multivariate vladi6 = [](const std::vector &x) { return 6. * std::cos(x[0] * std::sin(x[1])); }; -multivariate vladi7 +multivar_func sinecosine = [](const std::vector &x) { return 6. * std::cos(x[0] * std::sin(x[1])); }; +multivar_func ripple = [](const std::vector &x) { return (x[0] - 3.) * (x[1] - 3.) + 2 * std::sin((x[0] - 4.) * (x[1] - 4.)); }; -multivariate vladi8 = [](const std::vector &x) { +multivar_func ratpol2d = [](const std::vector &x) { return (std::pow(x[0] - 3., 4) + std::pow(x[1] - 3., 3) - (x[1] - 3.)) / (std::pow(x[1] - 2, 4.) + 10.); }; -void generate_1Ddata(std::vector> &points, std::vector> &labels, multivariate f, - double lb = -1, double ub = 1, unsigned N = 10) +// Generates data to test symbolic regression on 1D input-output cases. +void generate_1Ddata(std::vector> &points, std::vector> &labels, + multivar_func f, double lb = -1, double ub = 1, unsigned N = 10) { points.clear(); labels.clear(); @@ -104,7 +109,7 @@ void generate_P7(std::vector> &points, std::vector> &points, std::vector> &labels) +void generate_kotanchek(std::vector> &points, std::vector> &labels) { points.clear(); labels.clear(); @@ -113,14 +118,14 @@ void generate_vladi1(std::vector> &points, std::vector point = {dist(mt), dist(mt)}; points.push_back(point); - labels.push_back({detail::vladi1(point)}); + labels.push_back({detail::kotanchek(point)}); } } -void generate_vladi2(std::vector> &points, std::vector> &labels) +void generate_salutowicz(std::vector> &points, std::vector> &labels) { - gym::detail::generate_1Ddata(points, labels, detail::vladi2, 0.05, 10., 100); + gym::detail::generate_1Ddata(points, labels, detail::salutowicz, 0.05, 10., 100); } -void generate_vladi3(std::vector> &points, std::vector> &labels) +void generate_salutowicz2d(std::vector> &points, std::vector> &labels) { points.clear(); labels.clear(); @@ -129,10 +134,10 @@ void generate_vladi3(std::vector> &points, std::vector point = {dist(mt), dist(mt)}; points.push_back(point); - labels.push_back({detail::vladi3(point)}); + labels.push_back({detail::salutowicz2d(point)}); } } -void generate_vladi4(std::vector> &points, std::vector> &labels) +void generate_uball5d(std::vector> &points, std::vector> &labels) { points.clear(); labels.clear(); @@ -141,10 +146,10 @@ void generate_vladi4(std::vector> &points, std::vector point = {dist(mt), dist(mt), dist(mt), dist(mt), dist(mt)}; points.push_back(point); - labels.push_back({detail::vladi4(point)}); + labels.push_back({detail::uball5d(point)}); } } -void generate_vladi5(std::vector> &points, std::vector> &labels) +void generate_ratpol3d(std::vector> &points, std::vector> &labels) { points.clear(); labels.clear(); @@ -154,22 +159,22 @@ void generate_vladi5(std::vector> &points, std::vector point = {dist(mt), dist1(mt), dist(mt)}; points.push_back(point); - labels.push_back({detail::vladi5(point)}); + labels.push_back({detail::ratpol3d(point)}); } } -void generate_vladi6(std::vector> &points, std::vector> &labels) +void generate_sinecosine(std::vector> &points, std::vector> &labels) { points.clear(); labels.clear(); std::mt19937 mt(32); - std::uniform_real_distribution dist(0.05, 2); + std::uniform_real_distribution dist(0.1, 5.9); for (unsigned i = 0; i < 30u; ++i) { std::vector point = {dist(mt), dist(mt)}; points.push_back(point); - labels.push_back({detail::vladi6(point)}); + labels.push_back({detail::sinecosine(point)}); } } -void generate_vladi7(std::vector> &points, std::vector> &labels) +void generate_ripple(std::vector> &points, std::vector> &labels) { points.clear(); labels.clear(); @@ -178,10 +183,10 @@ void generate_vladi7(std::vector> &points, std::vector point = {dist(mt), dist(mt)}; points.push_back(point); - labels.push_back({detail::vladi7(point)}); + labels.push_back({detail::ripple(point)}); } } -void generate_vladi8(std::vector> &points, std::vector> &labels) +void generate_ratpol2d(std::vector> &points, std::vector> &labels) { points.clear(); labels.clear(); @@ -190,8 +195,66 @@ void generate_vladi8(std::vector> &points, std::vector point = {dist(mt), dist(mt)}; points.push_back(point); - labels.push_back({detail::vladi8(point)}); + labels.push_back({detail::ratpol2d(point)}); } } + +void generate_chwirut1(std::vector> &points, std::vector> &labels) +{ + points.clear(); + labels.clear(); + points = chwirut1_points; + labels = chwirut1_labels; +} + +void generate_chwirut2(std::vector> &points, std::vector> &labels) +{ + points.clear(); + labels.clear(); + points = chwirut2_points; + labels = chwirut2_labels; +} + +void generate_daniel_wood(std::vector> &points, std::vector> &labels) +{ + points.clear(); + labels.clear(); + points = daniel_wood_points; + labels = daniel_wood_labels; +} + +void generate_gauss1(std::vector> &points, std::vector> &labels) +{ + points.clear(); + labels.clear(); + points = gauss1_points; + labels = gauss1_labels; +} + +void generate_kirby2(std::vector> &points, std::vector> &labels) +{ + points.clear(); + labels.clear(); + points = kirby2_points; + labels = kirby2_labels; +} + +void generate_lanczos2(std::vector> &points, std::vector> &labels) +{ + points.clear(); + labels.clear(); + points = lanczos2_points; + labels = lanczos2_labels; +} + +void generate_misra1b(std::vector> &points, std::vector> &labels) +{ + points.clear(); + labels.clear(); + points = misra1b_points; + labels = misra1b_labels; +} } // namespace gym -} // namespace dcgp \ No newline at end of file +} // namespace dcgp + +#endif \ No newline at end of file diff --git a/include/dcgp/kernel.hpp b/include/dcgp/kernel.hpp index 91872d9e..94a037f0 100644 --- a/include/dcgp/kernel.hpp +++ b/include/dcgp/kernel.hpp @@ -19,10 +19,27 @@ namespace dcgp * std::vector&) computing, respectively, the function value on generic inputs and the textual * representation of the operation. * - * The intended use would then be something like: + * The intended use, for an example with ``T`` = ``double`` would then be something like: * @code - * kernel f(my_sum, print_my_sum, "sum"); - * kernel f(my_sum, print_my_sum, "sum"); + * inline double my_sum(const std::vector &in) + * { + * T retval(in[0]); + * for (auto i = 1u; i < in.size(); ++i) { + * retval += in[i]; + * } + * return retval; + * } + * + * inline std::string print_my_sum(const std::vector &in) + * { + * std::string retval(in[0]); + * for (auto i = 1u; i < in.size(); ++i) { + * retval += "+" + in[i]; + * } + * return "(" + retval + ")"; + * } + * + * kernel f(my_sum, print_my_sum, "my_sum"); * @endcode * * @tparam T The type of the function output (and inputs) diff --git a/include/dcgp/nist_data.hpp b/include/dcgp/nist_data.hpp new file mode 100644 index 00000000..11c0d37c --- /dev/null +++ b/include/dcgp/nist_data.hpp @@ -0,0 +1,225 @@ +#ifndef DCGP_NIST_DATA_H +#define DCGP_NIST_DATA_H + +#include + +// chwirut1 +inline std::vector> chwirut1_points + = {{0.5000E0, 0.6250E0, 0.7500E0, 0.8750E0, 1.0000E0, 1.2500E0, 1.7500E0, 2.2500E0, 1.7500E0, 2.2500E0, 2.7500E0, + 3.2500E0, 3.7500E0, 4.2500E0, 4.7500E0, 5.2500E0, 5.7500E0, 0.5000E0, 0.6250E0, 0.7500E0, 0.8750E0, 1.0000E0, + 1.2500E0, 1.7500E0, 2.2500E0, 1.7500E0, 2.2500E0, 2.7500E0, 3.2500E0, 3.7500E0, 4.2500E0, 4.7500E0, 5.2500E0, + 5.7500E0, 0.5000E0, 0.6250E0, 0.7500E0, 0.8750E0, 1.0000E0, 1.2500E0, 1.7500E0, 2.2500E0, 1.7500E0, 2.2500E0, + 2.7500E0, 3.2500E0, 3.7500E0, 4.2500E0, 4.7500E0, 5.2500E0, 5.7500E0, 0.5000E0, 0.6250E0, 0.7500E0, 0.8750E0, + 1.0000E0, 1.2500E0, 1.7500E0, 2.2500E0, 1.7500E0, 2.2500E0, 2.7500E0, 3.2500E0, 3.7500E0, 4.2500E0, 4.7500E0, + 5.2500E0, 5.7500E0, .5000E0, .7500E0, 1.5000E0, 3.0000E0, 3.0000E0, 3.0000E0, 6.0000E0, .5000E0, .7500E0, + 1.5000E0, 3.0000E0, 3.0000E0, 3.0000E0, 6.0000E0, .5000E0, .7500E0, 1.5000E0, 3.0000E0, 3.0000E0, 3.0000E0, + 6.0000E0, .5000E0, .7500E0, 1.5000E0, 3.0000E0, 6.0000E0, 3.0000E0, 3.0000E0, 6.0000E0, .5000E0, .7500E0, + 1.0000E0, 1.5000E0, 2.0000E0, 2.0000E0, 2.5000E0, 3.0000E0, 4.0000E0, 5.0000E0, 6.0000E0, .5000E0, .7500E0, + 1.0000E0, 1.5000E0, 2.0000E0, 2.0000E0, 2.5000E0, 3.0000E0, 4.0000E0, 5.0000E0, 6.0000E0, .5000E0, .7500E0, + 1.0000E0, 1.5000E0, 2.0000E0, 2.0000E0, 2.5000E0, 3.0000E0, 4.0000E0, 5.0000E0, 6.0000E0, .5000E0, .6250E0, + .7500E0, .8750E0, 1.0000E0, 1.2500E0, 2.2500E0, 2.2500E0, 2.7500E0, 3.2500E0, 3.7500E0, 4.2500E0, 4.7500E0, + 5.2500E0, 5.7500E0, 3.0000E0, 3.0000E0, 3.0000E0, 3.0000E0, 3.0000E0, 3.0000E0, .5000E0, .7500E0, 1.0000E0, + 1.5000E0, 2.0000E0, 2.5000E0, 2.0000E0, 2.5000E0, 3.0000E0, 4.0000E0, 5.0000E0, 6.0000E0, .5000E0, .7500E0, + 1.0000E0, 1.5000E0, 2.0000E0, 2.5000E0, 2.0000E0, 2.5000E0, 3.0000E0, 4.0000E0, 5.0000E0, 6.0000E0, .5000E0, + .7500E0, 1.0000E0, 1.5000E0, 2.0000E0, 2.5000E0, 2.0000E0, 2.5000E0, 3.0000E0, 4.0000E0, 5.0000E0, 6.0000E0, + 3.0000E0, .5000E0, .7500E0, 1.5000E0, 3.0000E0, 6.0000E0, 3.0000E0, 6.0000E0, 3.0000E0, 3.0000E0, 3.0000E0, + 1.7500E0, 1.7500E0, .5000E0, .7500E0, 1.7500E0, 1.7500E0, 2.7500E0, 3.7500E0, 1.7500E0, 1.7500E0, .5000E0, + .7500E0, 2.7500E0, 3.7500E0, 1.7500E0, 1.7500E0}}; +inline std::vector> chwirut1_labels + = {{92.9000E0, 78.7000E0, 64.2000E0, 64.9000E0, 57.1000E0, 43.3000E0, 31.1000E0, 23.6000E0, 31.0500E0, 23.7750E0, + 17.7375E0, 13.8000E0, 11.5875E0, 9.4125E0, 7.7250E0, 7.3500E0, 8.0250E0, 90.6000E0, 76.9000E0, 71.6000E0, + 63.6000E0, 54.0000E0, 39.2000E0, 29.3000E0, 21.4000E0, 29.1750E0, 22.1250E0, 17.5125E0, 14.2500E0, 9.4500E0, + 9.1500E0, 7.9125E0, 8.4750E0, 6.1125E0, 80.0000E0, 79.0000E0, 63.8000E0, 57.2000E0, 53.2000E0, 42.5000E0, + 26.8000E0, 20.4000E0, 26.8500E0, 21.0000E0, 16.4625E0, 12.5250E0, 10.5375E0, 8.5875E0, 7.1250E0, 6.1125E0, + 5.9625E0, 74.1000E0, 67.3000E0, 60.8000E0, 55.5000E0, 50.3000E0, 41.0000E0, 29.4000E0, 20.4000E0, 29.3625E0, + 21.1500E0, 16.7625E0, 13.2000E0, 10.8750E0, 8.1750E0, 7.3500E0, 5.9625E0, 5.6250E0, 81.5000E0, 62.4000E0, + 32.5000E0, 12.4100E0, 13.1200E0, 15.5600E0, 5.6300E0, 78.0000E0, 59.9000E0, 33.2000E0, 13.8400E0, 12.7500E0, + 14.6200E0, 3.9400E0, 76.8000E0, 61.0000E0, 32.9000E0, 13.8700E0, 11.8100E0, 13.3100E0, 5.4400E0, 78.0000E0, + 63.5000E0, 33.8000E0, 12.5600E0, 5.6300E0, 12.7500E0, 13.1200E0, 5.4400E0, 76.8000E0, 60.0000E0, 47.8000E0, + 32.0000E0, 22.2000E0, 22.5700E0, 18.8200E0, 13.9500E0, 11.2500E0, 9.0000E0, 6.6700E0, 75.8000E0, 62.0000E0, + 48.8000E0, 35.2000E0, 20.0000E0, 20.3200E0, 19.3100E0, 12.7500E0, 10.4200E0, 7.3100E0, 7.4200E0, 70.5000E0, + 59.5000E0, 48.5000E0, 35.8000E0, 21.0000E0, 21.6700E0, 21.0000E0, 15.6400E0, 8.1700E0, 8.5500E0, 10.1200E0, + 78.0000E0, 66.0000E0, 62.0000E0, 58.0000E0, 47.7000E0, 37.8000E0, 20.2000E0, 21.0700E0, 13.8700E0, 9.6700E0, + 7.7600E0, 5.4400E0, 4.8700E0, 4.0100E0, 3.7500E0, 24.1900E0, 25.7600E0, 18.0700E0, 11.8100E0, 12.0700E0, + 16.1200E0, 70.8000E0, 54.7000E0, 48.0000E0, 39.8000E0, 29.8000E0, 23.7000E0, 29.6200E0, 23.8100E0, 17.7000E0, + 11.5500E0, 12.0700E0, 8.7400E0, 80.7000E0, 61.3000E0, 47.5000E0, 29.0000E0, 24.0000E0, 17.7000E0, 24.5600E0, + 18.6700E0, 16.2400E0, 8.7400E0, 7.8700E0, 8.5100E0, 66.7000E0, 59.2000E0, 40.8000E0, 30.7000E0, 25.7000E0, + 16.3000E0, 25.9900E0, 16.9500E0, 13.3500E0, 8.6200E0, 7.2000E0, 6.6400E0, 13.6900E0, 81.0000E0, 64.5000E0, + 35.5000E0, 13.3100E0, 4.8700E0, 12.9400E0, 5.0600E0, 15.1900E0, 14.6200E0, 15.6400E0, 25.5000E0, 25.9500E0, + 81.7000E0, 61.6000E0, 29.8000E0, 29.8100E0, 17.1700E0, 10.3900E0, 28.4000E0, 28.6900E0, 81.3000E0, 60.9000E0, + 16.6500E0, 10.0500E0, 28.9000E0, 28.9500E0}}; + +// chwirut2 +inline std::vector> chwirut2_points + = {{0.500E0, 1.000E0, 1.750E0, 3.750E0, 5.750E0, 0.875E0, 2.250E0, 3.250E0, 5.250E0, 0.750E0, 1.750E0, + 2.750E0, 4.750E0, 0.625E0, 1.250E0, 2.250E0, 4.250E0, 0.500E0, 3.000E0, 0.750E0, 3.000E0, 1.500E0, + 6.000E0, 3.000E0, 6.000E0, 1.500E0, 3.000E0, 0.500E0, 2.000E0, 4.000E0, 0.750E0, 2.000E0, 5.000E0, + 0.750E0, 2.250E0, 3.750E0, 5.750E0, 3.000E0, 0.750E0, 2.500E0, 4.000E0, 0.750E0, 2.500E0, 4.000E0, + 0.750E0, 2.500E0, 4.000E0, 0.500E0, 6.000E0, 3.000E0, 0.500E0, 2.750E0, 0.500E0, 1.750E0}}; +inline std::vector> chwirut2_labels + = {{92.9000E0, 57.1000E0, 31.0500E0, 11.5875E0, 8.0250E0, 63.6000E0, 21.4000E0, 14.2500E0, 8.4750E0, + 63.8000E0, 26.8000E0, 16.4625E0, 7.1250E0, 67.3000E0, 41.0000E0, 21.1500E0, 8.1750E0, 81.5000E0, + 13.1200E0, 59.9000E0, 14.6200E0, 32.9000E0, 5.4400E0, 12.5600E0, 5.4400E0, 32.0000E0, 13.9500E0, + 75.8000E0, 20.0000E0, 10.4200E0, 59.5000E0, 21.6700E0, 8.5500E0, 62.0000E0, 20.2000E0, 7.7600E0, + 3.7500E0, 11.8100E0, 54.7000E0, 23.7000E0, 11.5500E0, 61.3000E0, 17.7000E0, 8.7400E0, 59.2000E0, + 16.3000E0, 8.6200E0, 81.0000E0, 4.8700E0, 14.6200E0, 81.7000E0, 17.1700E0, 81.3000E0, 28.9000E0}}; + +// daniel_wood +inline std::vector> daniel_wood_points = {{1.309E0, 1.471E0, 1.490E0, 1.565E0, 1.611E0, 1.680E0}}; +inline std::vector> daniel_wood_labels = {{2.138E0, 3.421E0, 3.597E0, 4.340E0, 4.882E0, 5.660E0}}; + +// gauss1 +inline std::vector> gauss1_points + = {{1.000000, 2.000000, 3.000000, 4.000000, 5.000000, 6.000000, 7.000000, 8.000000, 9.000000, 10.000000, + 11.00000, 12.00000, 13.00000, 14.00000, 15.00000, 16.00000, 17.00000, 18.00000, 19.00000, 20.00000, + 21.00000, 22.00000, 23.00000, 24.00000, 25.00000, 26.00000, 27.00000, 28.00000, 29.00000, 30.00000, + 31.00000, 32.00000, 33.00000, 34.00000, 35.00000, 36.00000, 37.00000, 38.00000, 39.00000, 40.00000, + 41.00000, 42.00000, 43.00000, 44.00000, 45.00000, 46.00000, 47.00000, 48.00000, 49.00000, 50.00000, + 51.00000, 52.00000, 53.00000, 54.00000, 55.00000, 56.00000, 57.00000, 58.00000, 59.00000, 60.00000, + 61.00000, 62.00000, 63.00000, 64.00000, 65.00000, 66.00000, 67.00000, 68.00000, 69.00000, 70.00000, + 71.00000, 72.00000, 73.00000, 74.00000, 75.00000, 76.00000, 77.00000, 78.00000, 79.00000, 80.00000, + 81.00000, 82.00000, 83.00000, 84.00000, 85.00000, 86.00000, 87.00000, 88.00000, 89.00000, 90.00000, + 91.00000, 92.00000, 93.00000, 94.00000, 95.00000, 96.00000, 97.00000, 98.00000, 99.00000, 100.00000, + 101.00000, 102.00000, 103.00000, 104.00000, 105.00000, 106.0000, 107.0000, 108.0000, 109.0000, 110.0000, + 111.0000, 112.0000, 113.0000, 114.0000, 115.0000, 116.0000, 117.0000, 118.0000, 119.0000, 120.0000, + 121.0000, 122.0000, 123.0000, 124.0000, 125.0000, 126.0000, 127.0000, 128.0000, 129.0000, 130.0000, + 131.0000, 132.0000, 133.0000, 134.0000, 135.0000, 136.0000, 137.0000, 138.0000, 139.0000, 140.0000, + 141.0000, 142.0000, 143.0000, 144.0000, 145.0000, 146.0000, 147.0000, 148.0000, 149.0000, 150.0000, + 151.0000, 152.0000, 153.0000, 154.0000, 155.0000, 156.0000, 157.0000, 158.0000, 159.0000, 160.0000, + 161.0000, 162.0000, 163.0000, 164.0000, 165.0000, 166.0000, 167.0000, 168.0000, 169.0000, 170.0000, + 171.0000, 172.0000, 173.0000, 174.0000, 175.0000, 176.0000, 177.0000, 178.0000, 179.0000, 180.0000, + 181.0000, 182.0000, 183.0000, 184.0000, 185.0000, 186.0000, 187.0000, 188.0000, 189.0000, 190.0000, + 191.0000, 192.0000, 193.0000, 194.0000, 195.0000, 196.0000, 197.0000, 198.0000, 199.0000, 200.0000, + 201.0000, 202.0000, 203.0000, 204.0000, 205.0000, 206.0000, 207.0000, 208.0000, 209.0000, 210.0000, + 211.0000, 212.0000, 213.0000, 214.0000, 215.0000, 216.0000, 217.0000, 218.0000, 219.0000, 220.0000, + 221.0000, 222.0000, 223.0000, 224.0000, 225.0000, 226.0000, 227.0000, 228.0000, 229.0000, 230.0000, + 231.0000, 232.0000, 233.0000, 234.0000, 235.0000, 236.0000, 237.0000, 238.0000, 239.0000, 240.0000, + 241.0000, 242.0000, 243.0000, 244.0000, 245.0000, 246.0000, 247.0000, 248.0000, 249.0000, 250.0000}}; +inline std::vector> gauss1_labels = { + {97.62227, 97.80724, 96.62247, 92.59022, 91.23869, 95.32704, 90.35040, 89.46235, 91.72520, 89.86916, 86.88076, + 85.94360, 87.60686, 86.25839, 80.74976, 83.03551, 88.25837, 82.01316, 82.74098, 83.30034, 81.27850, 81.85506, + 80.75195, 80.09573, 81.07633, 78.81542, 78.38596, 79.93386, 79.48474, 79.95942, 76.10691, 78.39830, 81.43060, + 82.48867, 81.65462, 80.84323, 88.68663, 84.74438, 86.83934, 85.97739, 91.28509, 97.22411, 93.51733, 94.10159, + 101.91760, 98.43134, 110.4214, 107.6628, 111.7288, 116.5115, 120.7609, 123.9553, 124.2437, 130.7996, 133.2960, + 130.7788, 132.0565, 138.6584, 142.9252, 142.7215, 144.1249, 147.4377, 148.2647, 152.0519, 147.3863, 149.2074, + 148.9537, 144.5876, 148.1226, 148.0144, 143.8893, 140.9088, 143.4434, 139.3938, 135.9878, 136.3927, 126.7262, + 124.4487, 122.8647, 113.8557, 113.7037, 106.8407, 107.0034, 102.46290, 96.09296, 94.57555, 86.98824, 84.90154, + 81.18023, 76.40117, 67.09200, 72.67155, 68.10848, 67.99088, 63.34094, 60.55253, 56.18687, 53.64482, 53.70307, + 48.07893, 42.21258, 45.65181, 41.69728, 41.24946, 39.21349, 37.71696, 36.68395, 37.30393, 37.43277, 37.45012, + 32.64648, 31.84347, 31.39951, 26.68912, 32.25323, 27.61008, 33.58649, 28.10714, 30.26428, 28.01648, 29.11021, + 23.02099, 25.65091, 28.50295, 25.23701, 26.13828, 33.53260, 29.25195, 27.09847, 26.52999, 25.52401, 26.69218, + 24.55269, 27.71763, 25.20297, 25.61483, 25.06893, 27.63930, 24.94851, 25.86806, 22.48183, 26.90045, 25.39919, + 17.90614, 23.76039, 25.89689, 27.64231, 22.86101, 26.47003, 23.72888, 27.54334, 30.52683, 28.07261, 34.92815, + 28.29194, 34.19161, 35.41207, 37.09336, 40.98330, 39.53923, 47.80123, 47.46305, 51.04166, 54.58065, 57.53001, + 61.42089, 62.79032, 68.51455, 70.23053, 74.42776, 76.59911, 81.62053, 83.42208, 79.17451, 88.56985, 85.66525, + 86.55502, 90.65907, 84.27290, 85.72220, 83.10702, 82.16884, 80.42568, 78.15692, 79.79691, 77.84378, 74.50327, + 71.57289, 65.88031, 65.01385, 60.19582, 59.66726, 52.95478, 53.87792, 44.91274, 41.09909, 41.68018, 34.53379, + 34.86419, 33.14787, 29.58864, 27.29462, 21.91439, 19.08159, 24.90290, 19.82341, 16.75551, 18.24558, 17.23549, + 16.34934, 13.71285, 14.75676, 13.97169, 12.42867, 14.35519, 7.703309, 10.234410, 11.78315, 13.87768, 4.535700, + 10.059280, 8.424824, 10.533120, 9.602255, 7.877514, 6.258121, 8.899865, 7.877754, 12.51191, 10.66205, 6.035400, + 6.790655, 8.783535, 4.600288, 8.400915, 7.216561, 10.017410, 7.331278, 6.527863, 2.842001, 10.325070, 4.790995, + 8.377101, 6.264445, 2.706213, 8.362329, 8.983658, 3.362571, 1.182746, 4.875359}}; + +// gauss2 +inline std::vector> gauss2_points + = {{1.000000, 2.000000, 3.000000, 4.000000, 5.000000, 6.000000, 7.000000, 8.000000, 9.000000, 10.000000, + 11.00000, 12.00000, 13.00000, 14.00000, 15.00000, 16.00000, 17.00000, 18.00000, 19.00000, 20.00000, + 21.00000, 22.00000, 23.00000, 24.00000, 25.00000, 26.00000, 27.00000, 28.00000, 29.00000, 30.00000, + 31.00000, 32.00000, 33.00000, 34.00000, 35.00000, 36.00000, 37.00000, 38.00000, 39.00000, 40.00000, + 41.00000, 42.00000, 43.00000, 44.00000, 45.00000, 46.00000, 47.00000, 48.00000, 49.00000, 50.00000, + 51.00000, 52.00000, 53.00000, 54.00000, 55.00000, 56.00000, 57.00000, 58.00000, 59.00000, 60.00000, + 61.00000, 62.00000, 63.00000, 64.00000, 65.00000, 66.00000, 67.00000, 68.00000, 69.00000, 70.00000, + 71.00000, 72.00000, 73.00000, 74.00000, 75.00000, 76.00000, 77.00000, 78.00000, 79.00000, 80.00000, + 81.00000, 82.00000, 83.00000, 84.00000, 85.00000, 86.00000, 87.00000, 88.00000, 89.00000, 90.00000, + 91.00000, 92.00000, 93.00000, 94.00000, 95.00000, 96.00000, 97.00000, 98.00000, 99.00000, 100.00000, + 101.00000, 102.00000, 103.00000, 104.00000, 105.00000, 106.0000, 107.0000, 108.0000, 109.0000, 110.0000, + 111.0000, 112.0000, 113.0000, 114.0000, 115.0000, 116.0000, 117.0000, 118.0000, 119.0000, 120.0000, + 121.0000, 122.0000, 123.0000, 124.0000, 125.0000, 126.0000, 127.0000, 128.0000, 129.0000, 130.0000, + 131.0000, 132.0000, 133.0000, 134.0000, 135.0000, 136.0000, 137.0000, 138.0000, 139.0000, 140.0000, + 141.0000, 142.0000, 143.0000, 144.0000, 145.0000, 146.0000, 147.0000, 148.0000, 149.0000, 150.0000, + 151.0000, 152.0000, 153.0000, 154.0000, 155.0000, 156.0000, 157.0000, 158.0000, 159.0000, 160.0000, + 161.0000, 162.0000, 163.0000, 164.0000, 165.0000, 166.0000, 167.0000, 168.0000, 169.0000, 170.0000, + 171.0000, 172.0000, 173.0000, 174.0000, 175.0000, 176.0000, 177.0000, 178.0000, 179.0000, 180.0000, + 181.0000, 182.0000, 183.0000, 184.0000, 185.0000, 186.0000, 187.0000, 188.0000, 189.0000, 190.0000, + 191.0000, 192.0000, 193.0000, 194.0000, 195.0000, 196.0000, 197.0000, 198.0000, 199.0000, 200.0000, + 201.0000, 202.0000, 203.0000, 204.0000, 205.0000, 206.0000, 207.0000, 208.0000, 209.0000, 210.0000, + 211.0000, 212.0000, 213.0000, 214.0000, 215.0000, 216.0000, 217.0000, 218.0000, 219.0000, 220.0000, + 221.0000, 222.0000, 223.0000, 224.0000, 225.0000, 226.0000, 227.0000, 228.0000, 229.0000, 230.0000, + 231.0000, 232.0000, 233.0000, 234.0000, 235.0000, 236.0000, 237.0000, 238.0000, 239.0000, 240.0000, + 241.0000, 242.0000, 243.0000, 244.0000, 245.0000, 246.0000, 247.0000, 248.0000, 249.0000, 250.0000}}; +inline std::vector> gauss2_labels = { + {97.58776, 97.76344, 96.56705, 92.52037, 91.15097, 95.21728, 90.21355, 89.29235, 91.51479, 89.60966, 86.56187, + 85.55316, 87.13054, 85.67940, 80.04851, 82.18925, 87.24081, 80.79407, 81.28570, 81.56940, 79.22715, 79.43275, + 77.90195, 76.75468, 77.17377, 74.27348, 73.11900, 73.84826, 72.47870, 71.92292, 66.92176, 67.93835, 69.56207, + 69.07066, 66.53983, 63.87883, 69.71537, 63.60588, 63.37154, 60.01835, 62.67481, 65.80666, 59.14304, 56.62951, + 61.21785, 54.38790, 62.93443, 56.65144, 57.13362, 58.29689, 58.91744, 58.50172, 55.22885, 58.30375, 57.43237, + 51.69407, 49.93132, 53.70760, 55.39712, 52.89709, 52.31649, 53.98720, 53.54158, 56.45046, 51.32276, 53.11676, + 53.28631, 49.80555, 54.69564, 56.41627, 54.59362, 54.38520, 60.15354, 59.78773, 60.49995, 65.43885, 60.70001, + 63.71865, 67.77139, 64.70934, 70.78193, 70.38651, 77.22359, 79.52665, 80.13077, 85.67823, 85.20647, 90.24548, + 93.61953, 95.86509, 93.46992, 105.8137, 107.8269, 114.0607, 115.5019, 118.5110, 119.6177, 122.1940, 126.9903, + 125.7005, 123.7447, 130.6543, 129.7168, 131.8240, 131.8759, 131.9994, 132.1221, 133.4414, 133.8252, 133.6695, + 128.2851, 126.5182, 124.7550, 118.4016, 122.0334, 115.2059, 118.7856, 110.7387, 110.2003, 105.17290, 103.44720, + 94.54280, 94.40526, 94.57964, 88.76605, 87.28747, 92.50443, 86.27997, 82.44307, 80.47367, 78.36608, 78.74307, + 76.12786, 79.13108, 76.76062, 77.60769, 77.76633, 81.28220, 79.74307, 81.97964, 80.02952, 85.95232, 85.96838, + 79.94789, 87.17023, 90.50992, 93.23373, 89.14803, 93.11492, 90.34337, 93.69421, 95.74256, 91.85105, 96.74503, + 87.60996, 90.47012, 88.11690, 85.70673, 85.01361, 78.53040, 81.34148, 75.19295, 72.66115, 69.85504, 66.29476, + 63.58502, 58.33847, 57.50766, 52.80498, 50.79319, 47.03490, 46.47090, 43.09016, 34.11531, 39.28235, 32.68386, + 30.44056, 31.98932, 23.63330, 23.69643, 20.26812, 19.07074, 17.59544, 16.08785, 18.94267, 18.61354, 17.25800, + 16.62285, 13.48367, 15.37647, 13.47208, 15.96188, 12.32547, 16.33880, 10.438330, 9.628715, 13.12268, 8.772417, + 11.76143, 12.55020, 11.33108, 11.20493, 7.816916, 6.800675, 14.26581, 10.66285, 8.911574, 11.56733, 11.58207, + 11.59071, 9.730134, 11.44237, 11.22912, 10.172130, 12.50905, 6.201493, 9.019605, 10.80607, 13.09625, 3.914271, + 9.567886, 8.038448, 10.231040, 9.367410, 7.695971, 6.118575, 8.793207, 7.796692, 12.45065, 10.61601, 6.001003, + 6.765098, 8.764653, 4.586418, 8.390783, 7.209202, 10.012090, 7.327461, 6.525136, 2.840065, 10.323710, 4.790035, + 8.376431, 6.263980, 2.705892, 8.362109, 8.983507, 3.362469, 1.182678, 4.875312}}; + +// Kirby2 +inline std::vector> kirby2_points + = {{9.65E0, 10.74E0, 11.81E0, 12.88E0, 14.06E0, 15.28E0, 16.63E0, 18.19E0, 19.88E0, 21.84E0, 24.00E0, + 26.25E0, 28.86E0, 31.85E0, 35.79E0, 40.18E0, 44.74E0, 49.53E0, 53.94E0, 58.29E0, 62.63E0, 67.03E0, + 71.25E0, 75.22E0, 79.33E0, 83.56E0, 87.75E0, 91.93E0, 96.10E0, 100.28E0, 104.46E0, 108.66E0, 112.71E0, + 116.88E0, 121.33E0, 125.79E0, 125.79E0, 128.74E0, 130.27E0, 133.33E0, 134.79E0, 137.93E0, 139.33E0, 142.46E0, + 143.90E0, 146.91E0, 148.51E0, 151.41E0, 153.17E0, 155.97E0, 157.76E0, 160.56E0, 162.30E0, 165.21E0, 166.90E0, + 169.92E0, 170.32E0, 171.54E0, 173.79E0, 174.57E0, 176.25E0, 177.34E0, 179.19E0, 181.02E0, 182.08E0, 183.88E0, + 185.75E0, 186.80E0, 188.63E0, 190.45E0, 191.48E0, 193.35E0, 195.22E0, 196.23E0, 198.05E0, 199.97E0, 201.06E0, + 202.83E0, 204.69E0, 205.86E0, 207.58E0, 209.50E0, 210.65E0, 212.33E0, 215.43E0, 217.16E0, 220.21E0, 221.98E0, + 225.06E0, 226.79E0, 229.92E0, 231.69E0, 234.77E0, 236.60E0, 239.63E0, 241.50E0, 244.48E0, 246.40E0, 249.35E0, + 251.32E0, 254.22E0, 256.24E0, 259.11E0, 261.18E0, 264.02E0, 266.13E0, 268.94E0, 271.09E0, 273.87E0, 276.08E0, + 278.83E0, 281.08E0, 283.81E0, 286.11E0, 288.81E0, 291.08E0, 293.75E0, 295.99E0, 298.64E0, 300.84E0, 302.02E0, + 303.48E0, 305.65E0, 308.27E0, 310.41E0, 313.01E0, 315.12E0, 317.71E0, 319.79E0, 322.36E0, 324.42E0, 326.98E0, + 329.01E0, 331.56E0, 333.56E0, 336.10E0, 338.08E0, 340.60E0, 342.57E0, 345.08E0, 347.02E0, 349.52E0, 351.44E0, + 353.93E0, 355.83E0, 358.32E0, 360.20E0, 362.67E0, 364.53E0, 367.00E0, 371.30E0}}; +inline std::vector> kirby2_labels + = {{9.65E0, 10.74E0, 11.81E0, 12.88E0, 14.06E0, 15.28E0, 16.63E0, 18.19E0, 19.88E0, 21.84E0, 24.00E0, + 26.25E0, 28.86E0, 31.85E0, 35.79E0, 40.18E0, 44.74E0, 49.53E0, 53.94E0, 58.29E0, 62.63E0, 67.03E0, + 71.25E0, 75.22E0, 79.33E0, 83.56E0, 87.75E0, 91.93E0, 96.10E0, 100.28E0, 104.46E0, 108.66E0, 112.71E0, + 116.88E0, 121.33E0, 125.79E0, 125.79E0, 128.74E0, 130.27E0, 133.33E0, 134.79E0, 137.93E0, 139.33E0, 142.46E0, + 143.90E0, 146.91E0, 148.51E0, 151.41E0, 153.17E0, 155.97E0, 157.76E0, 160.56E0, 162.30E0, 165.21E0, 166.90E0, + 169.92E0, 170.32E0, 171.54E0, 173.79E0, 174.57E0, 176.25E0, 177.34E0, 179.19E0, 181.02E0, 182.08E0, 183.88E0, + 185.75E0, 186.80E0, 188.63E0, 190.45E0, 191.48E0, 193.35E0, 195.22E0, 196.23E0, 198.05E0, 199.97E0, 201.06E0, + 202.83E0, 204.69E0, 205.86E0, 207.58E0, 209.50E0, 210.65E0, 212.33E0, 215.43E0, 217.16E0, 220.21E0, 221.98E0, + 225.06E0, 226.79E0, 229.92E0, 231.69E0, 234.77E0, 236.60E0, 239.63E0, 241.50E0, 244.48E0, 246.40E0, 249.35E0, + 251.32E0, 254.22E0, 256.24E0, 259.11E0, 261.18E0, 264.02E0, 266.13E0, 268.94E0, 271.09E0, 273.87E0, 276.08E0, + 278.83E0, 281.08E0, 283.81E0, 286.11E0, 288.81E0, 291.08E0, 293.75E0, 295.99E0, 298.64E0, 300.84E0, 302.02E0, + 303.48E0, 305.65E0, 308.27E0, 310.41E0, 313.01E0, 315.12E0, 317.71E0, 319.79E0, 322.36E0, 324.42E0, 326.98E0, + 329.01E0, 331.56E0, 333.56E0, 336.10E0, 338.08E0, 340.60E0, 342.57E0, 345.08E0, 347.02E0, 349.52E0, 351.44E0, + 353.93E0, 355.83E0, 358.32E0, 360.20E0, 362.67E0, 364.53E0, 367.00E0, 371.30E0}}; + +// lanczos2 +inline std::vector> lanczos2_points + = {{0.00000E+00, 5.00000E-02, 1.00000E-01, 1.50000E-01, 2.00000E-01, 2.50000E-01, 3.00000E-01, 3.50000E-01, + 4.00000E-01, 4.50000E-01, 5.00000E-01, 5.50000E-01, 6.00000E-01, 6.50000E-01, 7.00000E-01, 7.50000E-01, + 8.00000E-01, 8.50000E-01, 9.00000E-01, 9.50000E-01, 1.00000E+00, 1.05000E+00, 1.10000E+00, 1.15000E+00}}; +inline std::vector> lanczos2_labels + = {{2.5134E+00, 2.0443E+00, 1.6684E+00, 1.3664E+00, 1.1232E+00, 0.9269E+00, 0.7679E+00, 0.6389E+00, + 0.5338E+00, 0.4479E+00, 0.3776E+00, 0.3197E+00, 0.2720E+00, 0.2325E+00, 0.1997E+00, 0.1723E+00, + 0.1493E+00, 0.1301E+00, 0.1138E+00, 0.1000E+00, 0.0883E+00, 0.0783E+00, 0.0698E+00, 0.0624E+00}}; + +// misra1b +inline std::vector> misra1b_points + = {{77.6E0, 114.9E0, 141.1E0, 190.8E0, 239.9E0, 289.0E0, 332.8E0, 378.4E0, 434.8E0, 477.3E0, 536.8E0, 593.1E0, + 689.1E0, 760.0E0}}; +inline std::vector> misra1b_labels + = {{10.07E0, 14.73E0, 17.94E0, 23.93E0, 29.61E0, 35.18E0, 40.02E0, 44.82E0, 50.76E0, 55.05E0, 61.01E0, 66.40E0, + 75.47E0, 81.78E0}}; + +#endif // NIST_DATA_H diff --git a/include/dcgp/problems/symbolic_regression.hpp b/include/dcgp/problems/symbolic_regression.hpp index 72fd1898..8a843812 100644 --- a/include/dcgp/problems/symbolic_regression.hpp +++ b/include/dcgp/problems/symbolic_regression.hpp @@ -18,6 +18,7 @@ namespace dcgp { /// A Symbolic Regression problem /** + * * * Symbolic regression is a type of regression analysis that searches the space of mathematical expressions to * find the model that best fits a given dataset, both in terms of accuracy and simplicity @@ -51,13 +52,15 @@ class symbolic_regression /** * Constructs a symbolic_regression optimization problem compatible with the pagmo UDP interface. * - * @param[in] points number of inputs (independent variables). - * @param[in] labels number of outputs (dependent variables). + * @param[in] points input data. + * @param[in] labels output data. * @param[in] r number of rows of the dCGP. * @param[in] c number of columns of the dCGP. * @param[in] l number of levels-back allowed in the dCGP. * @param[in] arity arity of the basis functions. * @param[in] f function set. An std::vector of dcgp::kernel. + * @param[in] n_eph number of ephemeral constants. + * @param[in] multi_objective when true, it will consider the model complexity as a second objective. * @param[in] parallel_batches number of parallel batches. * * @throws std::invalid_argument if points and labels are not consistent. @@ -96,7 +99,7 @@ class symbolic_regression f_g.push_back(ker.get_name()); } } - m_dcgp = expression(n, m, m_r, m_c, m_l, m_arity, f_g(), m_n_eph, seed); + m_dcgp = expression(n, m, m_r, m_c, m_l, m_arity, f_g(), m_n_eph, seed); // We initialize the dpoints/dduals m_dpoints.clear(); m_dlabels.clear(); @@ -379,8 +382,8 @@ class symbolic_regression std::string get_extra_info() const { std::ostringstream ss; - pagmo::stream(ss, "\tData dimension (in): ", m_points[0].size(), "\n"); - pagmo::stream(ss, "\tData dimension (out): ", m_labels[0].size(), "\n"); + pagmo::stream(ss, "\tData dimension (points): ", m_points[0].size(), "\n"); + pagmo::stream(ss, "\tData dimension (labels): ", m_labels[0].size(), "\n"); pagmo::stream(ss, "\tData size: ", m_points.size(), "\n"); pagmo::stream(ss, "\tKernels: ", m_cgp.get_f(), "\n"); return ss.str(); @@ -451,6 +454,15 @@ class symbolic_regression return m_cgp; } + /// Thread safety for this udp + /** + * This is set to none as pitonic kernels could be in the inner expression + */ + //pagmo::thread_safety get_thread_safety() const + // { + // return pagmo::thread_safety::none; + // } + private: // This setter can be marked const as m_cgp is mutable void set_cgp(const pagmo::vector_double &x) const @@ -500,8 +512,8 @@ class symbolic_regression std::vector> m_points; std::vector> m_labels; - std::vector> m_dpoints; - std::vector> m_dlabels; + std::vector> m_dpoints; + std::vector> m_dlabels; std::vector m_deph_symb; std::vector m_symbols; @@ -518,7 +530,7 @@ class symbolic_regression // avoided, but likely resulting in prepature optimization. (see https://github.com/darioizzo/dcgp/pull/42) mutable expression m_cgp; // TODO: this should be vectorized gduals - mutable expression m_dcgp; + mutable expression m_dcgp; mutable std::pair m_cache_fitness; mutable std::pair m_cache_gradient; }; // namespace dcgp diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index bcd8bc51..886405ea 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -8,7 +8,7 @@ MACRO(ADD_DCGP_TESTCASE arg1) ADD_EXECUTABLE(${arg1} ${arg1}.cpp) TARGET_LINK_LIBRARIES(${arg1} dcgp Boost::unit_test_framework) target_compile_options(${arg1} PRIVATE "$<$:${DCGP_CXX_FLAGS_DEBUG}>") - set_property(TARGET ${arg1} PROPERTY CXX_STANDARD 14) + set_property(TARGET ${arg1} PROPERTY CXX_STANDARD 17) set_property(TARGET ${arg1} PROPERTY CXX_STANDARD_REQUIRED YES) ADD_TEST(${arg1} ${arg1}) ENDIF(CMAKE_BUILD_TYPE STREQUAL "Debug") @@ -17,9 +17,9 @@ ENDMACRO(ADD_DCGP_TESTCASE) MACRO(ADD_DCGP_PERFORMANCE_TESTCASE arg1) IF(CMAKE_BUILD_TYPE STREQUAL "Release") ADD_EXECUTABLE("${arg1}_perf" "${arg1}_perf.cpp") - TARGET_LINK_LIBRARIES("${arg1}_perf" dcgp Boost::timer Boost::chrono Boost::system Boost::unit_test_framework) + TARGET_LINK_LIBRARIES("${arg1}_perf" dcgp Audi::audi Boost::timer Boost::chrono Boost::system Boost::unit_test_framework) target_compile_options("${arg1}_perf" PRIVATE "$<$:${DCGP_CXX_FLAGS_RELEASE}>") - set_property(TARGET "${arg1}_perf" PROPERTY CXX_STANDARD 14) + set_property(TARGET "${arg1}_perf" PROPERTY CXX_STANDARD 17) set_property(TARGET "${arg1}_perf" PROPERTY CXX_STANDARD_REQUIRED YES) ADD_TEST("${arg1}_perf" "${arg1}_perf") ENDIF(CMAKE_BUILD_TYPE STREQUAL "Release") diff --git a/tests/differentiate.cpp b/tests/differentiate.cpp index 4c00709d..19c5261a 100644 --- a/tests/differentiate.cpp +++ b/tests/differentiate.cpp @@ -10,11 +10,11 @@ using namespace dcgp; BOOST_AUTO_TEST_CASE(differentiation_basic_set) { - kernel_set basic_set({"sum", "diff", "mul", "div"}); - expression ex(3, 1, 1, 20, 21, 2, basic_set(), 0); + kernel_set basic_set({"sum", "diff", "mul", "div"}); + expression ex(3, 1, 1, 20, 21, 2, basic_set(), 0); - std::vector in({gdual_d(1., "x", 2), gdual_d(1., "y", 2), gdual_d(1., "z", 2)}); - std::vector in2({gdual_d(-1., "x", 6), gdual_d(1., "y", 6), gdual_d(1., "z", 6)}); + std::vector in({audi::gdual_d(1., "x", 2), audi::gdual_d(1., "y", 2), audi::gdual_d(1., "z", 2)}); + std::vector in2({audi::gdual_d(-1., "x", 6), audi::gdual_d(1., "y", 6), audi::gdual_d(1., "z", 6)}); // We set the expression to 2 y^2 (x + z)^2 ex.set({0, 2, 1, 0, 1, 3, 0, 2, 0, 2, 5, 1, 0, 6, 6, 1, 3, 7, 2, 5, 3, 3, 0, 3, 0, 10, 10, 2, 1, 7, 3, diff --git a/tests/gym.cpp b/tests/gym.cpp index c37df6ff..30cd5097 100644 --- a/tests/gym.cpp +++ b/tests/gym.cpp @@ -57,52 +57,52 @@ BOOST_AUTO_TEST_CASE(gym_test) BOOST_CHECK_EQUAL(labels[i][0], gym::detail::P7(points[i])); BOOST_CHECK_EQUAL(labels.size(), points.size()); } - gym::generate_vladi1(points, labels); + gym::generate_kotanchek(points, labels); for (decltype(points.size()) i = 0u; i < points.size(); ++i) { - BOOST_CHECK_EQUAL(labels[i][0], gym::detail::vladi1(points[i])); + BOOST_CHECK_EQUAL(labels[i][0], gym::detail::kotanchek(points[i])); BOOST_CHECK_EQUAL(labels.size(), points.size()); } - gym::generate_vladi2(points, labels); + gym::generate_salutowicz(points, labels); for (decltype(points.size()) i = 0u; i < points.size(); ++i) { - BOOST_CHECK_EQUAL(labels[i][0], gym::detail::vladi2(points[i])); + BOOST_CHECK_EQUAL(labels[i][0], gym::detail::salutowicz(points[i])); BOOST_CHECK_EQUAL(labels.size(), points.size()); } - gym::generate_vladi3(points, labels); + gym::generate_salutowicz2d(points, labels); for (decltype(points.size()) i = 0u; i < points.size(); ++i) { - BOOST_CHECK_EQUAL(labels[i][0], gym::detail::vladi3(points[i])); + BOOST_CHECK_EQUAL(labels[i][0], gym::detail::salutowicz2d(points[i])); BOOST_CHECK_EQUAL(labels.size(), points.size()); } - gym::generate_vladi4(points, labels); + gym::generate_uball5d(points, labels); for (decltype(points.size()) i = 0u; i < points.size(); ++i) { - BOOST_CHECK_EQUAL(labels[i][0], gym::detail::vladi4(points[i])); + BOOST_CHECK_EQUAL(labels[i][0], gym::detail::uball5d(points[i])); BOOST_CHECK_EQUAL(labels.size(), points.size()); } - gym::generate_vladi5(points, labels); + gym::generate_ratpol3d(points, labels); for (decltype(points.size()) i = 0u; i < points.size(); ++i) { - BOOST_CHECK_EQUAL(labels[i][0], gym::detail::vladi5(points[i])); + BOOST_CHECK_EQUAL(labels[i][0], gym::detail::ratpol3d(points[i])); BOOST_CHECK_EQUAL(labels.size(), points.size()); } - gym::generate_vladi6(points, labels); + gym::generate_sinecosine(points, labels); for (decltype(points.size()) i = 0u; i < points.size(); ++i) { - BOOST_CHECK_EQUAL(labels[i][0], gym::detail::vladi6(points[i])); + BOOST_CHECK_EQUAL(labels[i][0], gym::detail::sinecosine(points[i])); BOOST_CHECK_EQUAL(labels.size(), points.size()); } - gym::generate_vladi7(points, labels); + gym::generate_ripple(points, labels); for (decltype(points.size()) i = 0u; i < points.size(); ++i) { - BOOST_CHECK_EQUAL(labels[i][0], gym::detail::vladi7(points[i])); + BOOST_CHECK_EQUAL(labels[i][0], gym::detail::ripple(points[i])); BOOST_CHECK_EQUAL(labels.size(), points.size()); } - gym::generate_vladi8(points, labels); + gym::generate_ratpol2d(points, labels); for (decltype(points.size()) i = 0u; i < points.size(); ++i) { - BOOST_CHECK_EQUAL(labels[i][0], gym::detail::vladi8(points[i])); + BOOST_CHECK_EQUAL(labels[i][0], gym::detail::ratpol2d(points[i])); BOOST_CHECK_EQUAL(labels.size(), points.size()); } } diff --git a/tests/symbolic_regression.cpp b/tests/symbolic_regression.cpp index ebe86eb6..96870b20 100644 --- a/tests/symbolic_regression.cpp +++ b/tests/symbolic_regression.cpp @@ -48,7 +48,7 @@ BOOST_AUTO_TEST_CASE(fitness_test_single_obj) { kernel_set basic_set({"sum", "diff", "mul", "div"}); std::vector> points, labels; - gym::generate_vladi4(points, labels); + gym::generate_uball5d(points, labels); // 2xy, 2x pagmo::vector_double test_x = {0, 1, 1, 0, 0, 0, 2, 0, 2, 2, 0, 2, 4, 3}; // On a single point/label. @@ -104,7 +104,7 @@ BOOST_AUTO_TEST_CASE(fitness_test_two_obj) { kernel_set basic_set({"sum", "diff", "mul", "div"}); std::vector> points, labels; - gym::generate_vladi4(points, labels); + gym::generate_uball5d(points, labels); symbolic_regression udp{points, labels, 1, 15, 16, 2, basic_set(), 2, true, 0u}; pagmo::population pop(udp, 10u); for (decltype(pop.size()) i = 0u; i < pop.size(); ++i) { diff --git a/tools/appveyor-download.cmd b/tools/appveyor-download.cmd deleted file mode 100644 index a1554f72..00000000 --- a/tools/appveyor-download.cmd +++ /dev/null @@ -1,18 +0,0 @@ -@echo off -rem initiate the retry number -set retryNumber=0 -set maxRetries=6 -set time=0 - -:DOWNLOAD -timeout %time% > NUL -set /a time=2*%time%+1 -appveyor DownloadFile %* - -rem problem? -IF NOT ERRORLEVEL 1 GOTO :EOF -@echo Oops, appveyor download exited with code %ERRORLEVEL% - let us try again! -set /a retryNumber=%retryNumber%+1 -IF %reTryNumber% LSS %maxRetries% (GOTO :DOWNLOAD) -@echo Sorry, we tried downloading the package for %maxRetries% times and all attempts were unsuccessful! -EXIT /B 1 diff --git a/tools/install_appveyor_mingw.py b/tools/install_appveyor_mingw.py deleted file mode 100644 index 5afbe0bd..00000000 --- a/tools/install_appveyor_mingw.py +++ /dev/null @@ -1,269 +0,0 @@ -import os -import re -import sys - -def wget(url, out): - import urllib.request - print('Downloading "' + url + '" as "' + out + '"') - urllib.request.urlretrieve(url, out) - -def rm_fr(path): - import shutil - if os.path.isdir(path) and not os.path.islink(path): - shutil.rmtree(path) - elif os.path.exists(path): - os.remove(path) - -def run_command(raw_command, directory=None, verbose=True): - # Helper function to run a command and display optionally its output - # unbuffered. - import shlex - from subprocess import Popen, PIPE, STDOUT - print(raw_command) - proc = Popen(shlex.split(raw_command), cwd=directory, - stdout=PIPE, stderr=STDOUT) - if verbose: - output = '' - while True: - line = proc.stdout.readline() - if not line: - break - line = str(line, 'utf-8') - # Don't print the newline character. - print(line[:-1]) - sys.stdout.flush() - output += line - proc.communicate() - else: - output = str(proc.communicate()[0], 'utf-8') - if proc.returncode: - raise RuntimeError(output) - return output - -# ----------------------------------SCRIPT START-----------------------------------------# -# Build type setup. -BUILD_TYPE = os.environ['BUILD_TYPE'] -is_release_build = (os.environ['APPVEYOR_REPO_TAG'] == 'true') and bool( - re.match(r'v[0-9]+\.[0-9]+.*', os.environ['APPVEYOR_REPO_TAG_NAME'])) -if is_release_build: - print("Release build detected, tag is '" + - os.environ['APPVEYOR_REPO_TAG_NAME'] + "'") -is_python_build = 'Python' in BUILD_TYPE - -# Check here for a list of installed software in the appveyor VMs: https://www.appveyor.com/docs/windows-images-software/ -# USING: mingw64 8.1.0 -ORIGINAL_PATH = os.environ['PATH'] -run_command(r'mv C:\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64 C:\\mingw64') -os.environ['PATH'] = r'C:\\mingw64\\bin;' + os.environ['PATH'] -# Set the path so that the precompiled libs can be found. -os.environ['PATH'] = os.environ['PATH'] + r';c:\\local\\lib' - -# Download common deps. -wget(r'https://github.com/bluescarni/binary_deps/raw/master/gmp_mingw81_64.7z', 'gmp.7z') -wget(r'https://github.com/bluescarni/binary_deps/raw/master/mpfr_mingw81_64.7z', 'mpfr.7z') -wget(r'https://github.com/bluescarni/binary_deps/raw/master/nlopt_mingw81_64.7z', 'nlopt.7z') -wget(r'https://github.com/bluescarni/binary_deps/raw/master/boost_mgw81-mt-x64-1_70.7z', 'boost.7z') -wget(r'https://github.com/bluescarni/binary_deps/raw/master/eigen3.7z', 'eigen3.7z') -wget(r'https://github.com/bluescarni/binary_deps/raw/master/tbb_2019_mgw81.7z', 'tbb.7z') - -# Extract them. -run_command(r'7z x -aoa -oC:\\ gmp.7z', verbose=False) -run_command(r'7z x -aoa -oC:\\ mpfr.7z', verbose=False) -run_command(r'7z x -aoa -oC:\\ nlopt.7z', verbose=False) -run_command(r'7z x -aoa -oC:\\ boost.7z', verbose=False) -run_command(r'7z x -aoa -oC:\\ eigen3.7z', verbose=False) -run_command(r'7z x -aoa -oC:\\ tbb.7z', verbose=False) - -# Options common to all builds (pagmo and ppnf related) -# NOTE: at the moment boost 1.70 seems to have problem to autodetect -# the mingw library (with CMake 3.13 currently installed in appveyor) -# Thus we manually point to the boost libs. -common_cmake_opts = r'-DCMAKE_PREFIX_PATH=c:\\local ' + \ - r'-DCMAKE_INSTALL_PREFIX=c:\\local ' + \ - r'-DBoost_INCLUDE_DIR=c:\\local\\include ' + \ - r'-DBoost_SERIALIZATION_LIBRARY_RELEASE=c:\\local\\lib\\libboost_serialization-mgw81-mt-x64-1_70.dll ' - -## ------------------------------ INSTALL C/C++ DEPENDENCIES -------------------------------------## -# Download symengine 0.5.0 https://github.com/symengine/symengine/archive/v0.5.0.zip -wget(r'https://github.com/symengine/symengine/archive/v0.5.0.zip', 'SymEngine.zip') -run_command(r'unzip SymEngine.zip', verbose=False) -# Move to the directory created and make piranha install its headers -os.chdir('symengine-0.5.0') -os.makedirs('build') -os.chdir('build') -print("Installing SymEngine") -run_command(r'cmake -G "MinGW Makefiles" .. -DCMAKE_INSTALL_PREFIX=c:\\local', verbose=False) -run_command(r'mingw32-make install VERBOSE=1', verbose=False) -os.chdir('../../') -print("SymEngine sucessfully installed .. continuing") - - -# Download piranha 0.11 https://github.com/bluescarni/piranha/archive/v0.11.zip -wget(r'https://github.com/bluescarni/piranha/archive/v0.11.zip', 'piranhav11.zip') -run_command(r'unzip piranhav11.zip', verbose=False) -# Move to the directory created and make piranha install its headers -os.chdir('piranha-0.11') -os.makedirs('build') -os.chdir('build') -print("Installing piranha") -run_command( - r'cmake -G "MinGW Makefiles" .. -DCMAKE_INSTALL_PREFIX=c:\\local -DBoost_INCLUDE_DIR=c:\\local\\include', verbose=False) -run_command(r'mingw32-make install VERBOSE=1', verbose=False) -os.chdir('../../') -print("Piranha sucessfully installed .. continuing") - -# Download audi 1.6 https://github.com/darioizzo/audi/archive/v1.6.zip -wget(r'https://github.com/darioizzo/audi/archive/v1.6.zip', 'audi.zip') -run_command(r'unzip audi.zip', verbose=False) -# Move to the directory created and make audi install its headers -os.chdir('audi-1.6') -os.makedirs('build') -os.chdir('build') -print("Installing audi") -run_command(r'cmake -G "MinGW Makefiles" .. ' + \ - r'-DAUDI_BUILD_AUDI=yes ' + \ - r'-DAUDI_BUILD_PYAUDI=no ' + \ - r'-DAUDI_BUILD_TEST=no ' + \ - r'-DAUDI_WITH_MPPP=no ' + \ - common_cmake_opts + - r'-DBoost_CHRONO_LIBRARY_RELEASE=c:\\local\\lib\\libboost_chrono-mgw81-mt-x64-1_70.dll ' + \ - r'-DBoost_SYSTEM_LIBRARY_RELEASE=c:\\local\\lib\\libboost_system-mgw81-mt-x64-1_70.dll ' + \ - r'-DBoost_UNIT_TEST_FRAMEWORK_LIBRARY_RELEASE=c:\\local\\lib\\libboost_unit_test_framework-mgw81-mt-x64-1_70.dll ' + \ - r'-DBoost_TIMER_LIBRARY_RELEASE=c:\\local\\lib\\libboost_timer-mgw81-mt-x64-1_70.dll ', verbose=False) -run_command(r'mingw32-make install VERBOSE=1', verbose=False) -os.chdir('../../') -print("Audi sucessfully installed .. continuing") - -# Get pagmo from git, install the headers and the library -wget(r'https://github.com/esa/pagmo2/archive/v2.11.3.tar.gz', 'pagmo.tar.gz') -run_command(r'7z x -aoa -oC:\\projects pagmo.tar.gz', verbose=False) -run_command(r'7z x -aoa -oC:\\projects C:\\projects\\pagmo.tar', verbose=False) -os.chdir('c:\\projects\\pagmo2-2.11.3') -os.makedirs('build_pagmo') -os.chdir('build_pagmo') -run_command(r'cmake -G "MinGW Makefiles" .. ' + - common_cmake_opts + - r'-DPAGMO_WITH_EIGEN3=yes ' + - r'-DPAGMO_WITH_NLOPT=yes ' + - r'-DCMAKE_BUILD_TYPE=Release ') -run_command(r'mingw32-make install VERBOSE=1 -j2') -# We add this so that the pagmo dll is found -os.environ['PATH'] = os.getcwd() + ";" + os.environ['PATH'] -os.chdir('../../') -print("Pagmo sucessfully installed .. continuing") - -## -------------------------- END INSTALL C/C++ DEPENDENCIES -------------------------------------## - -# Setup of the Python build variables (python version based) -if is_python_build: - if 'Python37-x64' in BUILD_TYPE: - python_version = r'37' - python_folder = r'Python37-x64' - python_library = r'C:\\' + python_folder + r'\\python37.dll ' - elif 'Python36-x64' in BUILD_TYPE: - python_version = '36' - python_folder = r'Python36-x64' - python_library = r'C:\\' + python_folder + r'\\python36.dll ' - elif 'Python27-x64' in BUILD_TYPE: - python_version = r'27' - python_folder = r'Python27-x64' - python_library = r'C:\\' + python_folder + r'\\libs\\python27.dll ' - # Fot py27 I could not get it to work with the appveyor python (I was close but got tired). - # Since this is anyway going to disappear (py27 really!!!), I am handling it as a one time workaround using the old py27 patched by bluescarni - rm_fr(r'c:\\Python27-x64') - wget(r'https://github.com/bluescarni/binary_deps/raw/master/python27_mingw_64.7z', 'python.7z') - run_command(r'7z x -aoa -oC:\\ python.7z', verbose=False) - run_command(r'mv C:\\Python27 C:\\Python27-x64', verbose=False) - else: - raise RuntimeError('Unsupported Python build: ' + BUILD_TYPE) - - # Set paths. - pinterp = r"C:\\" + python_folder + r'\\python.exe' - pip = r"C:\\" + python_folder + r'\\scripts\\pip' - twine = r"C:\\" + python_folder + r'\\scripts\\twine' - module_install_path = r"C:\\" + python_folder + r'\\Lib\\site-packages\\dcgpy' - # Install pip and deps. - run_command(pinterp + r' --version', verbose=True) - wget(r'https://bootstrap.pypa.io/get-pip.py', 'get-pip.py') - run_command(pinterp + ' get-pip.py --force-reinstall') - run_command(pip + ' install numpy') - run_command(pip + ' install pyaudi') - if is_release_build: - run_command(pip + ' install twine') - -# Set the path so that the precompiled libs can be found. -#os.environ['PATH'] = os.environ['PATH'] + r';c:\\local\\lib' - -# Proceed to the build. The following arguments will be used for all build cases. -common_cmake_opts = r'-DCMAKE_PREFIX_PATH=c:\\local ' + \ - r'-DCMAKE_INSTALL_PREFIX=c:\\local ' + \ - r'-DBoost_INCLUDE_DIR=c:\\local\\include ' + \ - r'-DBoost_SERIALIZATION_LIBRARY_RELEASE=c:\\local\\lib\\libboost_serialization-mgw81-mt-x64-1_70.dll ' + \ - r'-DBoost_CHRONO_LIBRARY_RELEASE=c:\\local\\lib\\libboost_chrono-mgw81-mt-x64-1_70.dll ' + \ - r'-DBoost_SYSTEM_LIBRARY_RELEASE=c:\\local\\lib\\libboost_system-mgw81-mt-x64-1_70.dll ' + \ - r'-DBoost_UNIT_TEST_FRAMEWORK_LIBRARY_RELEASE=c:\\local\\lib\\libboost_unit_test_framework-mgw81-mt-x64-1_70.dll ' + \ - r'-DBoost_TIMER_LIBRARY_RELEASE=c:\\local\\lib\\libboost_timer-mgw81-mt-x64-1_70.dll ' - -if is_python_build: - os.chdir('C:\projects\d-cgp') - os.makedirs('build_dcgp') - os.chdir('build_dcgp') - run_command( - r'cmake -G "MinGW Makefiles" .. -DCMAKE_BUILD_TYPE=Release -DDCGP_BUILD_TESTS=no -DDCGP_BUILD_DCGP=yes -DDCGP_BUILD_DCGPY=no' + ' ' + common_cmake_opts) - run_command(r'mingw32-make install VERBOSE=1 -j2') - os.chdir('..') - os.makedirs('build_dcgpy') - os.chdir('build_dcgpy') - run_command(r'cmake -G "MinGW Makefiles" .. ' + \ - common_cmake_opts + \ - r'-DDCGPY_INSTALL_PATH=c:\\local ' + \ - r'-DDCGP_BUILD_DCGP=no ' + \ - r'-DDCGP_BUILD_DCGPY=yes ' + \ - r'-DCMAKE_BUILD_TYPE=Release ' + \ - r'-DBoost_PYTHON' + python_version + r'_LIBRARY_RELEASE=c:\\local\\lib\\libboost_python' + python_version + r'-mgw81-mt-x64-1_70.dll ' + \ - r'-DPYTHON_INCLUDE_DIR=C:\\' + python_folder + r'\\include ' + \ - r'-DPYTHON_EXECUTABLE=C:\\' + python_folder + r'\\python.exe ' + \ - r'-DPYTHON_LIBRARY=' + python_library) - run_command(r'mingw32-make install VERBOSE=1 -j2') -elif BUILD_TYPE in ['Release', 'Debug']: - os.chdir('C:\projects\d-cgp') - os.makedirs('build') - os.chdir('build') - cmake_opts = r'-DCMAKE_BUILD_TYPE=' + BUILD_TYPE + \ - r' -DDCGP_BUILD_TESTS=yes ' \ - + common_cmake_opts - run_command(r'cmake -G "MinGW Makefiles" .. ' + cmake_opts) - run_command(r'mingw32-make install VERBOSE=1 -j2') - run_command(r'ctest -VV') -else: - raise RuntimeError('Unsupported build type: ' + BUILD_TYPE) - -# Packaging. -if is_python_build: - # Run the Python tests. - run_command( - pinterp + r' -c "from dcgpy import test; test.run_test_suite()"') - # Build the wheel. - import shutil - os.chdir('wheel') - shutil.move(module_install_path, r'.') - wheel_libs = 'mingw_wheel_libs_python{}.txt'.format(python_version) - DLL_LIST = [_[:-1] for _ in open(wheel_libs, 'r').readlines()] - for _ in DLL_LIST: - shutil.copy(_, 'dcgpy') - run_command(pinterp + r' setup.py bdist_wheel') - os.environ['PATH'] = ORIGINAL_PATH - # workaround necessary to be able to call pip install via python (next line) and - # not find a dcgpy already in the pythonpath - os.makedirs('garbage') - shutil.move('dcgpy', r'garbage') - shutil.move('dcgpy.egg-info', r'garbage') - # call pip via python, workaround to avoid path issues when calling pip from win - # (https://github.com/pypa/pip/issues/1997) - run_command(pinterp + r' -m pip install dist\\' + os.listdir('dist')[0]) - run_command( - pinterp + r' -c "from dcgpy import test; test.run_test_suite()"', directory=r'c:\\') - if is_release_build: - run_command(pinterp + r' -m pip install twine') - run_command(twine + r' upload -u darioizzo dist\\' + - os.listdir('dist')[0]) diff --git a/tools/install_deps.sh b/tools/install_deps.sh index e2ac5125..95e31a2c 100755 --- a/tools/install_deps.sh +++ b/tools/install_deps.sh @@ -17,12 +17,13 @@ if [[ "${DCGP_BUILD}" != manylinux* ]]; then bash miniconda.sh -b -p $HOME/miniconda conda config --add channels conda-forge --force - conda_pkgs="cmake eigen nlopt ipopt boost boost-cpp tbb tbb-devel pagmo audi symengine" + # obake-devel is needed as far as the conda package audi does not list it as a dependency + conda_pkgs="cmake eigen boost boost-cpp tbb tbb-devel pagmo audi symengine obake-devel" if [[ "${DCGP_BUILD}" == "Python37" || "${DCGP_BUILD}" == "OSXPython37" ]]; then - conda_pkgs="$conda_pkgs python=3.7 pyaudi" + conda_pkgs="$conda_pkgs python=3.7 pyaudi pygmo" elif [[ "${DCGP_BUILD}" == "Python27" || "${DCGP_BUILD}" == "OSXPython27" ]]; then - conda_pkgs="$conda_pkgs python=2.7 pyaudi" + conda_pkgs="$conda_pkgs python=2.7 pyaudi pygmo" fi # We create the conda environment and activate it diff --git a/tools/install_docker.sh b/tools/install_docker.sh index 3e3c5492..8d0714d9 100755 --- a/tools/install_docker.sh +++ b/tools/install_docker.sh @@ -6,26 +6,29 @@ set -x # Exit on error. set -e -AUDI_VERSION="1.6" -PIRANHA_VERSION="0.11" +AUDI_VERSION="1.7" PAGMO_VERSION="2.11.3" if [[ ${DCGP_BUILD} == *37 ]]; then PYTHON_DIR="cp37-cp37m" BOOST_PYTHON_LIBRARY_NAME="libboost_python37.so" PYTHON_VERSION="37" + PYTHON_VERSION_DOTTED="3.7" elif [[ ${DCGP_BUILD} == *36 ]]; then PYTHON_DIR="cp36-cp36m" BOOST_PYTHON_LIBRARY_NAME="libboost_python36.so" PYTHON_VERSION="36" + PYTHON_VERSION_DOTTED="3.6" elif [[ ${DCGP_BUILD} == *27mu ]]; then PYTHON_DIR="cp27-cp27mu" BOOST_PYTHON_LIBRARY_NAME="libboost_python27mu.so" PYTHON_VERSION="27" + PYTHON_VERSION_DOTTED="2.7" elif [[ ${DCGP_BUILD} == *27 ]]; then PYTHON_DIR="cp27-cp27m" BOOST_PYTHON_LIBRARY_NAME="libboost_python27.so" PYTHON_VERSION="27" + PYTHON_VERSION_DOTTED="2.7" else echo "Invalid build type: ${DCGP_BUILD}" exit 1 @@ -46,27 +49,10 @@ fi cd cd install -# Install piranha -curl -L https://github.com/bluescarni/piranha/archive/v${PIRANHA_VERSION}.tar.gz > v${PIRANHA_VERSION} -tar xvf v${PIRANHA_VERSION} > /dev/null 2>&1 -cd piranha-${PIRANHA_VERSION} -mkdir build -cd build -cmake -DBoost_NO_BOOST_CMAKE=ON ../ > /dev/null -make install > /dev/null 2>&1 -cd .. - -# Install audi -curl -L https://github.com/darioizzo/audi/archive/v${AUDI_VERSION}.tar.gz > v${AUDI_VERSION} -tar xvf v${AUDI_VERSION} > /dev/null 2>&1 -cd audi-${AUDI_VERSION} -mkdir build -cd build -cmake -DBoost_NO_BOOST_CMAKE=ON -DAUDI_BUILD_AUDI=yes -DAUDI_BUILD_TESTS=no -DCMAKE_BUILD_TYPE=Release ../ -make install > /dev/null 2>&1 -cd .. +# Python deps +/opt/python/${PYTHON_DIR}/bin/pip install numpy cloudpickle -# Install pagmo +# Install pagmo and pygmo curl -L https://github.com/esa/pagmo2/archive/v${PAGMO_VERSION}.tar.gz > pagmo2.tar.gz tar xzf pagmo2.tar.gz cd pagmo2-${PAGMO_VERSION} @@ -79,10 +65,27 @@ cmake -DBoost_NO_BOOST_CMAKE=ON \ -DCMAKE_BUILD_TYPE=Release ../; make -j2 install cd ../ +mkdir build_pygmo +cd build_pygmo +cmake -DBoost_NO_BOOST_CMAKE=ON \ + -DCMAKE_BUILD_TYPE=Release \ + -DPAGMO_BUILD_PYGMO=yes \ + -DPAGMO_BUILD_PAGMO=no \ + -DBoost_PYTHON${PYTHON_VERSION}_LIBRARY_RELEASE=/usr/local/lib/${BOOST_PYTHON_LIBRARY_NAME} \ + -DPYTHON_EXECUTABLE=/opt/python/${PYTHON_DIR}/bin/python \ + -DYACMA_PYTHON_MODULES_INSTALL_PATH=/opt/python/${PYTHON_DIR}/lib/python${PYTHON_VERSION_DOTTED}/site-packages ../; +make -j2 install +cd ../ -# Python deps -/opt/python/${PYTHON_DIR}/bin/pip install numpy -sleep 20 +# Install audi +curl -L https://github.com/darioizzo/audi/archive/v${AUDI_VERSION}.tar.gz > v${AUDI_VERSION} +tar xvf v${AUDI_VERSION} > /dev/null 2>&1 +cd audi-${AUDI_VERSION} +mkdir build +cd build +cmake -DBoost_NO_BOOST_CMAKE=ON -DAUDI_BUILD_AUDI=yes -DAUDI_BUILD_TESTS=no -DCMAKE_BUILD_TYPE=Release ../ +make install > /dev/null 2>&1 +cd .. # Install dcgp headers cd /dcgp @@ -94,7 +97,12 @@ make install # Compile and install dcgpy (build directory is created by .travis.yml) cd /dcgp cd build -cmake -DBoost_NO_BOOST_CMAKE=ON -DBoost_PYTHON${PYTHON_VERSION}_LIBRARY_RELEASE=/usr/local/lib/${BOOST_PYTHON_LIBRARY_NAME} -DCMAKE_BUILD_TYPE=Release -DDCGP_BUILD_DCGP=no -DDCGP_BUILD_DCGPY=yes -DPYTHON_EXECUTABLE=/opt/python/${PYTHON_DIR}/bin/python ../; +cmake -DBoost_NO_BOOST_CMAKE=ON \ + -DCMAKE_BUILD_TYPE=Release \ + -DDCGP_BUILD_DCGP=no \ + -DDCGP_BUILD_DCGPY=yes \ + -DBoost_PYTHON${PYTHON_VERSION}_LIBRARY_RELEASE=/usr/local/lib/${BOOST_PYTHON_LIBRARY_NAME} \ + -DPYTHON_EXECUTABLE=/opt/python/${PYTHON_DIR}/bin/python ../; make -j2 install diff --git a/tools/install_travis.sh b/tools/install_travis.sh index 1a2403e7..b96d9060 100755 --- a/tools/install_travis.sh +++ b/tools/install_travis.sh @@ -25,14 +25,6 @@ elif [[ "${DCGP_BUILD}" == "CoverageGCC" ]]; then make -j2 VERBOSE=1; ctest -VV; bash <(curl -s https://codecov.io/bash) -x gcov-5; -elif [[ "${DCGP_BUILD}" == "DebugClang" ]]; then - CXX=clang++-7 CC=clang-7 cmake -DCMAKE_PREFIX_PATH=$deps_dir -DBoost_NO_BOOST_CMAKE=ON -DCMAKE_BUILD_TYPE=Debug --DCMAKE_BUILD_TYPE=Debug -DDCGP_BUILD_DCGP=yes -DDCGP_BUILD_TESTS=yes -DQuadmath_INCLUDE_DIR=/usr/lib/gcc/x86_64-linux-gnu/7/include -DQuadmath_LIBRARY=/usr/lib/gcc/x86_64-linux-gnu/7/libquadmath.so ../; - make -j2 VERBOSE=1; - ctest -VV; -elif [[ "${DCGP_BUILD}" == "ReleaseClang" ]]; then - CXX=clang++-7 CC=clang-7 cmake -DCMAKE_PREFIX_PATH=$deps_dir -DBoost_NO_BOOST_CMAKE=ON -DCMAKE_BUILD_TYPE=Release -DCMAKE_BUILD_TYPE=Release -DDCGP_BUILD_DCGP=yes -DDCGP_BUILD_TESTS=yes -DQuadmath_INCLUDE_DIR=/usr/lib/gcc/x86_64-linux-gnu/7/include -DQuadmath_LIBRARY=/usr/lib/gcc/x86_64-linux-gnu/7/libquadmath.so ../; - make -j2 VERBOSE=1; - ctest -VV; elif [[ "${DCGP_BUILD}" == Python* ]]; then # Install dcgp cmake -DCMAKE_INSTALL_PREFIX=$deps_dir -DCMAKE_PREFIX_PATH=$deps_dir -DBoost_NO_BOOST_CMAKE=ON -DCMAKE_BUILD_TYPE=Release -DDCGP_BUILD_DCGP=yes -DDCGP_BUILD_TESTS=no ../; @@ -59,11 +51,11 @@ elif [[ "${DCGP_BUILD}" == OSXPython* ]]; then cd ..; mkdir build_dcgp; cd build_dcgp; - cmake -DCMAKE_INSTALL_PREFIX=$deps_dir -DCMAKE_PREFIX_PATH=$deps_dir -DCMAKE_BUILD_TYPE=Debug -DDCGP_BUILD_DCGP=yes -DDCGP_BUILD_TESTS=no -DDCGP_BUILD_EXAMPLES=no ../; + cmake -DCMAKE_INSTALL_PREFIX=$deps_dir -DCMAKE_PREFIX_PATH=$deps_dir -DBoost_NO_BOOST_CMAKE=ON -DCMAKE_BUILD_TYPE=Release -DDCGP_BUILD_DCGP=yes -DDCGP_BUILD_TESTS=no -DDCGP_BUILD_EXAMPLES=no ../; make install VERBOSE=1; cd ../build; # Now dcgpy. - cmake -DCMAKE_INSTALL_PREFIX=$deps_dir -DCMAKE_PREFIX_PATH=$deps_dir -DCMAKE_BUILD_TYPE=Debug -DDCGP_BUILD_DCGP=no -DDCGP_BUILD_DCGPY=yes -DCMAKE_CXX_FLAGS_DEBUG="-g0" ../; + cmake -DCMAKE_INSTALL_PREFIX=$deps_dir -DCMAKE_PREFIX_PATH=$deps_dir -DBoost_NO_BOOST_CMAKE=ON -DCMAKE_BUILD_TYPE=Release -DDCGP_BUILD_DCGP=no -DDCGP_BUILD_DCGPY=yes -DCMAKE_CXX_FLAGS_DEBUG="-g0" ../; make install VERBOSE=1; # Move out of the build dir. cd ../tools diff --git a/tools/mingw_wheel_libs_python27.txt b/tools/mingw_wheel_libs_python27.txt deleted file mode 100644 index 7d43f300..00000000 --- a/tools/mingw_wheel_libs_python27.txt +++ /dev/null @@ -1,7 +0,0 @@ -c:\local\lib\libboost_python27-mgw81-mt-x64-1_70.dll -c:\local\lib\libboost_serialization-mgw81-mt-x64-1_70.dll -c:\local\lib\tbb.dll -c:\mingw64\bin\libgcc_s_seh-1.dll -c:\mingw64\bin\libstdc++-6.dll -c:\mingw64\bin\libwinpthread-1.dll -c:\mingw64\bin\libquadmath-0.dll \ No newline at end of file diff --git a/tools/mingw_wheel_libs_python36.txt b/tools/mingw_wheel_libs_python36.txt deleted file mode 100644 index 0621e140..00000000 --- a/tools/mingw_wheel_libs_python36.txt +++ /dev/null @@ -1,7 +0,0 @@ -c:\local\lib\libboost_python36-mgw81-mt-x64-1_70.dll -c:\local\lib\libboost_serialization-mgw81-mt-x64-1_70.dll -c:\local\lib\tbb.dll -c:\mingw64\bin\libgcc_s_seh-1.dll -c:\mingw64\bin\libstdc++-6.dll -c:\mingw64\bin\libwinpthread-1.dll -c:\mingw64\bin\libquadmath-0.dll diff --git a/tools/mingw_wheel_libs_python37.txt b/tools/mingw_wheel_libs_python37.txt deleted file mode 100644 index 51d94e6d..00000000 --- a/tools/mingw_wheel_libs_python37.txt +++ /dev/null @@ -1,7 +0,0 @@ -c:\local\lib\libboost_python37-mgw81-mt-x64-1_70.dll -c:\local\lib\libboost_serialization-mgw81-mt-x64-1_70.dll -c:\local\lib\tbb.dll -c:\mingw64\bin\libgcc_s_seh-1.dll -c:\mingw64\bin\libstdc++-6.dll -c:\mingw64\bin\libwinpthread-1.dll -c:\mingw64\bin\libquadmath-0.dll diff --git a/tools/wheel_setup.py b/tools/wheel_setup.py index 82b1888c..49f3b1d1 100644 --- a/tools/wheel_setup.py +++ b/tools/wheel_setup.py @@ -11,7 +11,7 @@ AUTHOR = 'Dario Izzo' AUTHOR_EMAIL = 'dario.izzo@gmail.com' LICENSE = 'GPLv3+/LGPL3+' -INSTALL_REQUIRES = ['pyaudi'] +INSTALL_REQUIRES = ['pyaudi', 'pygmo'] CLASSIFIERS = [ # How mature is this project? Common values are # 3 - Alpha @@ -34,20 +34,13 @@ 'Programming Language :: Python :: 3' ] KEYWORDS = 'cartesian genetic programming backpropagation machine learning' -PLATFORMS = ['Unix', 'Windows', 'OSX'] +PLATFORMS = ['Unix'] class BinaryDistribution(Distribution): def has_ext_modules(foo): return True -# Setup the list of external dlls. -import os -if os.name == 'nt': - mingw_wheel_libs = 'mingw_wheel_libs_python{}{}.txt'.format( - sys.version_info[0], sys.version_info[1]) - l = open(mingw_wheel_libs, 'r').readlines() - DLL_LIST = [os.path.basename(_[:-1]) for _ in l] setup(name=NAME, version=VERSION, @@ -63,6 +56,5 @@ def has_ext_modules(foo): install_requires=INSTALL_REQUIRES, packages=['dcgpy'], # Include pre-compiled extension - package_data={'dcgpy': ['core.pyd'] + \ - DLL_LIST if os.name == 'nt' else ['core.so']}, + package_data={'dcgpy': ['core.pyd'] + ['core.so']}, distclass=BinaryDistribution)