From a7a736b6d640c2c2782031d6b7213cbbfd452f7b Mon Sep 17 00:00:00 2001 From: Shungang Li Date: Wed, 24 Apr 2024 11:39:16 +0800 Subject: [PATCH 01/33] feat: add pcre2 lib to precheck geometry wkt --- cmake/cmake.options | 61 ++++++++++++------------ cmake/pcre2_CMakeLists.txt.in | 13 ++++++ contrib/CMakeLists.txt | 21 ++++++--- include/util/tgeosctx.h | 4 ++ include/util/tpcre2.h | 34 ++++++++++++++ source/libs/geometry/src/geosWrapper.c | 65 ++++++++++++++++++++++++++ source/util/CMakeLists.txt | 18 +++---- source/util/src/tgeosctx.c | 4 ++ source/util/src/tpcr2.c | 35 ++++++++++++++ 9 files changed, 209 insertions(+), 46 deletions(-) create mode 100644 cmake/pcre2_CMakeLists.txt.in create mode 100644 include/util/tpcre2.h create mode 100644 source/util/src/tpcr2.c diff --git a/cmake/cmake.options b/cmake/cmake.options index e12de3e4e6..fc17ddecf6 100644 --- a/cmake/cmake.options +++ b/cmake/cmake.options @@ -47,27 +47,20 @@ IF(${TD_WINDOWS}) MESSAGE("build wingetopt Win32") option( - BUILD_WINGETOPT + BUILD_WINGETOPT "If build wingetopt on Windows" ON ) - + option( TDENGINE_3 "TDengine 3.x for taos-tools" ON ) - + option( BUILD_CRASHDUMP - "If build crashdump on Windows" - ON - ) - - MESSAGE("build geos Win32") - option( - BUILD_GEOS - "If build geos on Windows" + "If build crashdump on Windows" ON ) @@ -79,7 +72,7 @@ ENDIF () option( BUILD_GEOS - "If build geos on Windows" + "If build with geos" ON ) @@ -95,6 +88,12 @@ option( ON ) +option( + BUILD_PCRE2 + "If build with pcre2" + ON +) + option( JEMALLOC_ENABLED "If build with jemalloc" @@ -114,14 +113,14 @@ option( ) option( - BUILD_WITH_LEVELDB - "If build with leveldb" + BUILD_WITH_LEVELDB + "If build with leveldb" OFF ) option( - BUILD_WITH_ROCKSDB - "If build with rocksdb" + BUILD_WITH_ROCKSDB + "If build with rocksdb" ON ) @@ -170,46 +169,46 @@ ENDIF () option( BUILD_WITH_SQLITE - "If build with sqlite" + "If build with sqlite" OFF ) option( BUILD_WITH_BDB - "If build with BDB" + "If build with BDB" OFF ) option( - BUILD_WITH_LUCENE - "If build with lucene" - off + BUILD_WITH_LUCENE + "If build with lucene" + off ) option( BUILD_WITH_NURAFT - "If build with NuRaft" + "If build with NuRaft" OFF ) option( BUILD_WITH_UV - "If build with libuv" - ON + "If build with libuv" + ON ) option( BUILD_WITH_UV_TRANS - "If build with libuv_trans " - ON + "If build with libuv_trans " + ON ) IF(${TD_LINUX} MATCHES TRUE) option( - BUILD_DEPENDENCY_TESTS - "If build dependency tests" + BUILD_DEPENDENCY_TESTS + "If build dependency tests" ON ) @@ -217,14 +216,14 @@ ENDIF () option( BUILD_DOCS - "If use doxygen build documents" + "If use doxygen build documents" OFF ) option( BUILD_WITH_INVERTEDINDEX - "If use invertedIndex" - ON + "If use invertedIndex" + ON ) option( diff --git a/cmake/pcre2_CMakeLists.txt.in b/cmake/pcre2_CMakeLists.txt.in new file mode 100644 index 0000000000..c3115d8201 --- /dev/null +++ b/cmake/pcre2_CMakeLists.txt.in @@ -0,0 +1,13 @@ + +# pcre2 +ExternalProject_Add(pcre2 + GIT_REPOSITORY https://github.com/PCRE2Project/pcre2.git + GIT_TAG pcre2-10.43 + SOURCE_DIR "${TD_CONTRIB_DIR}/pcre2" + #BINARY_DIR "${TD_CONTRIB_DIR}/pcre2" + #BUILD_IN_SOURCE TRUE + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" + TEST_COMMAND "" + ) diff --git a/contrib/CMakeLists.txt b/contrib/CMakeLists.txt index ccd60df19a..543eb8e056 100644 --- a/contrib/CMakeLists.txt +++ b/contrib/CMakeLists.txt @@ -121,7 +121,7 @@ if (${BUILD_CONTRIB}) cat("${TD_SUPPORT_DIR}/rocksdb_CMakeLists.txt.in" ${CONTRIB_TMP_FILE}) add_definitions(-DUSE_ROCKSDB) endif() -else() +else() if (NOT ${TD_LINUX}) if(${BUILD_WITH_ROCKSDB}) cat("${TD_SUPPORT_DIR}/rocksdb_CMakeLists.txt.in" ${CONTRIB_TMP_FILE}) @@ -183,6 +183,11 @@ if(${BUILD_GEOS}) cat("${TD_SUPPORT_DIR}/geos_CMakeLists.txt.in" ${CONTRIB_TMP_FILE}) endif() +# +if(${BUILD_PCRE2}) + cat("${TD_SUPPORT_DIR}/pcre2_CMakeLists.txt.in" ${CONTRIB_TMP_FILE}) +endif() + # download dependencies configure_file(${CONTRIB_TMP_FILE} "${TD_CONTRIB_DIR}/deps-download/CMakeLists.txt") execute_process(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" . @@ -266,8 +271,8 @@ unset(CMAKE_PROJECT_INCLUDE_BEFORE) # add_subdirectory(xz EXCLUDE_FROM_ALL) # target_include_directories( # xz -# PUBLIC ${CMAKE_CURRENT_BINARY_DIR}/xz -# PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/xz +# PUBLIC ${CMAKE_CURRENT_BINARY_DIR}/xz +# PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/xz # ) # leveldb @@ -347,7 +352,7 @@ if (${BUILD_WITH_ROCKSDB}) rocksdb PUBLIC $ ) - else() + else() if (NOT ${TD_LINUX}) MESSAGE(STATUS "ROCKSDB CXX STATUS CONFIG: " ${CMAKE_CXX_FLAGS}) MESSAGE(STATUS "ROCKSDB C STATUS CONFIG: " ${CMAKE_C_FLAGS}) @@ -396,8 +401,8 @@ if (${BUILD_WITH_ROCKSDB}) rocksdb PUBLIC $ ) - endif() - + endif() + endif() endif() @@ -601,6 +606,10 @@ if(${BUILD_GEOS}) ) endif(${BUILD_GEOS}) +if (${BUILD_PCRE2}) + add_subdirectory(pcre2 EXCLUDE_FROM_ALL) +endif(${BUILD_PCRE2}) + # ================================================================================================ # Build test # ================================================================================================ diff --git a/include/util/tgeosctx.h b/include/util/tgeosctx.h index b5ac5a9333..267ba9e049 100644 --- a/include/util/tgeosctx.h +++ b/include/util/tgeosctx.h @@ -21,6 +21,7 @@ extern "C" { #endif #include +#include typedef struct SGeosContext { GEOSContextHandle_t handle; @@ -31,6 +32,9 @@ typedef struct SGeosContext { GEOSWKBReader *WKBReader; GEOSWKBWriter *WKBWriter; + pcre2_code *WKTRegex; + pcre2_match_data *WKTMatchData; + char errMsg[512]; } SGeosContext; diff --git a/include/util/tpcre2.h b/include/util/tpcre2.h new file mode 100644 index 0000000000..4fd461cfc8 --- /dev/null +++ b/include/util/tpcre2.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2019 TAOS Data, Inc. + * + * This program is free software: you can use, redistribute, and/or modify + * it under the terms of the GNU Affero General Public License, version 3 + * or later ("AGPL"), as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +#ifndef _TD_ULIT_PCRE2_H_ +#define _TD_ULIT_PCRE2_H_ + +#define PCRE2_CODE_UNIT_WIDTH 8 +#include "pcre2.h" + +#ifdef __cplusplus +extern "C" { +#endif + +int32_t doRegComp(pcre2_code** ppRegex, pcre2_match_data** ppMatchData, const char* pattern); +int32_t doRegExec(const char* pString, pcre2_code* pRegex, pcre2_match_data* pMatchData); +void destroyRegexes(pcre2_code* pWktRegex, pcre2_match_data* pWktMatchData); + +#ifdef __cplusplus +} +#endif + +#endif // _TD_UTIL_PAGEDBUF_H_ diff --git a/source/libs/geometry/src/geosWrapper.c b/source/libs/geometry/src/geosWrapper.c index ad2d477a13..9111f1cd6a 100644 --- a/source/libs/geometry/src/geosWrapper.c +++ b/source/libs/geometry/src/geosWrapper.c @@ -86,6 +86,62 @@ _exit: return code; } +static int initWktRegex(pcre2_code **ppRegex, pcre2_match_data **ppMatchData) { + int ret = 0; + char *wktPatternWithSpace = taosMemoryCalloc(4, 1024); + sprintf( + wktPatternWithSpace, + "^( *)point( *)z?m?( *)((empty)|(\\(( *)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?(( " + "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?){1,3}( *)\\)))|linestring( *)z?m?( " + "*)((empty)|(\\(( *)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?(( " + "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?){1,3}(( *)(,)( " + "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?(( " + "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?){1,3}( *))*( *)\\)))|polygon( *)z?m?( " + "*)((empty)|(\\(( *)((empty)|(\\(( *)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?(( " + "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?){1,3}(( *)(,)( " + "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?(( " + "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?){1,3}( *))*( *)\\)))(( *)(,)( " + "*)((empty)|(\\(( *)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?(( " + "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?){1,3}(( *)(,)( " + "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?(( " + "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?){1,3}( *))*( *)\\)))( *))*( " + "*)\\)))|multipoint( *)z?m?( *)((empty)|(\\(( " + "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?(( " + "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?){1,3}(( *)(,)( " + "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?(( " + "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?){1,3}( *))*( *)\\)))|multilinestring( " + "*)z?m?( *)((empty)|(\\(( *)((empty)|(\\(( *)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?(( " + "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?){1,3}(( *)(,)( " + "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?(( " + "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?){1,3}( *))*( *)\\)))(( *)(,)( " + "*)((empty)|(\\(( *)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?(( " + "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?){1,3}(( *)(,)( " + "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?(( " + "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?){1,3}( *))*( *)\\)))( *))*( " + "*)\\)))|multipolygon( *)z?m?( *)((empty)|(\\(( *)((empty)|(\\(( *)((empty)|(\\(( " + "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?(( " + "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?){1,3}(( *)(,)( " + "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?(( " + "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?){1,3}( *))*( *)\\)))(( *)(,)( " + "*)((empty)|(\\(( *)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?(( " + "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?){1,3}(( *)(,)( " + "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?(( " + "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?){1,3}( *))*( *)\\)))( *))*( *)\\)))(( *)(,)( " + "*)((empty)|(\\(( *)((empty)|(\\(( *)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?(( " + "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?){1,3}(( *)(,)( " + "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?(( " + "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?){1,3}( *))*( *)\\)))(( *)(,)( " + "*)((empty)|(\\(( *)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?(( " + "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?){1,3}(( *)(,)( " + "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?(( " + "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?){1,3}( *))*( *)\\)))( *))*( *)\\)))( *))*( " + "*)\\)))|(GEOCOLLECTION\\((?R)(( *)(,)( *)(?R))*( *)\\))( *)$"); + + ret = doRegComp(ppRegex, ppMatchData, wktPatternWithSpace); + taosMemoryFree(wktPatternWithSpace); + return ret; +} + int32_t initCtxGeomFromText() { int32_t code = TSDB_CODE_FAILED; SGeosContext* geosCtx = getThreadLocalGeosCtx(); @@ -113,6 +169,10 @@ int32_t initCtxGeomFromText() { } } + if (geosCtx->WKTRegex == NULL) { + if (initWktRegex(&geosCtx->WKTRegex, &geosCtx->WKTMatchData) != 0) return code; + } + return TSDB_CODE_SUCCESS; } @@ -125,6 +185,11 @@ int32_t doGeomFromText(const char *inputWKT, unsigned char **outputGeom, size_t GEOSGeometry *geom = NULL; unsigned char *wkb = NULL; + if (doRegExec(inputWKT, geosCtx->WKTRegex, geosCtx->WKTMatchData) != 0) { + code = TSDB_CODE_FUNC_FUNTION_PARA_VALUE; + goto _exit; + } + geom = GEOSWKTReader_read_r(geosCtx->handle, geosCtx->WKTReader, inputWKT); if (geom == NULL) { code = TSDB_CODE_FUNC_FUNTION_PARA_VALUE; diff --git a/source/util/CMakeLists.txt b/source/util/CMakeLists.txt index 5ee0740eef..f907746821 100644 --- a/source/util/CMakeLists.txt +++ b/source/util/CMakeLists.txt @@ -21,29 +21,29 @@ target_include_directories( PRIVATE "${TD_SOURCE_DIR}/utils/TSZ/sz/inc" PRIVATE "${TD_SOURCE_DIR}/utils/TSZ/zstd/" PRIVATE "${TD_SOURCE_DIR}/contrib/lzma2/" + PRIVATE "${TD_SOURCE_DIR}/contrib/pcre2/" ) target_link_directories( util PUBLIC "${TD_SOURCE_DIR}/contrib/lzma2" + PUBLIC "${TD_SOURCE_DIR}/contrib/pcre2" ) - if (TD_LINUX) target_link_libraries( util PUBLIC os common - PUBLIC lz4_static fast-lzma2 - PUBLIC api cjson geos_c TSZ - - ) -else() + PUBLIC lz4_static fast-lzma2 pcre2-8 + PUBLIC api cjson geos_c TSZ + ) +else() target_link_libraries( util PUBLIC os common - PUBLIC lz4_static - PUBLIC api cjson geos_c TSZ - ) + PUBLIC lz4_static pcre2-8 + PUBLIC api cjson geos_c TSZ + ) endif() if(${BUILD_TEST}) diff --git a/source/util/src/tgeosctx.c b/source/util/src/tgeosctx.c index b4e7e953df..b60e9ee8ac 100644 --- a/source/util/src/tgeosctx.c +++ b/source/util/src/tgeosctx.c @@ -43,6 +43,10 @@ void destroyThreadLocalGeosCtx() { tlGeosCtx.WKBWriter = NULL; } + if (tlGeosCtx.WKTRegex) { + destroyRegexes(tlGeosCtx.WKTRegex, tlGeosCtx.WKTMatchData); + } + if(tlGeosCtx.handle) { GEOS_finish_r(tlGeosCtx.handle); tlGeosCtx.handle = NULL; diff --git a/source/util/src/tpcr2.c b/source/util/src/tpcr2.c new file mode 100644 index 0000000000..5f5e4ffde6 --- /dev/null +++ b/source/util/src/tpcr2.c @@ -0,0 +1,35 @@ +#include "tpcre2.h" + +int32_t doRegComp(pcre2_code** ppRegex, pcre2_match_data** ppMatchData, const char* pattern) { + uint32_t options = PCRE2_CASELESS; + int errorcode; + PCRE2_SIZE erroroffset; + + *ppRegex = pcre2_compile((PCRE2_SPTR8)pattern, PCRE2_ZERO_TERMINATED, options, &errorcode, &erroroffset, NULL); + if (*ppRegex == NULL) { + PCRE2_UCHAR buffer[256]; + pcre2_get_error_message(errorcode, buffer, sizeof(buffer)); + return 1; + } + + *ppMatchData = pcre2_match_data_create_from_pattern(*ppRegex, NULL); + + return 0; +} + +int32_t doRegExec(const char* pString, pcre2_code* pRegex, pcre2_match_data* pMatchData) { + int32_t ret = 0; + ret = pcre2_match(pRegex, (PCRE2_SPTR)pString, PCRE2_ZERO_TERMINATED, 0, 0, pMatchData, NULL); + if (ret < 0) { + PCRE2_UCHAR buffer[256]; + pcre2_get_error_message(ret, buffer, sizeof(buffer)); + return 1; + } + + return (ret > 0) ? 0 : 1; +} + +void destroyRegexes(pcre2_code* pWktRegex, pcre2_match_data* pWktMatchData) { + pcre2_code_free(pWktRegex); + pcre2_match_data_free(pWktMatchData); +} From 40e0c6902eb08378a7a21be4af60c285855434c2 Mon Sep 17 00:00:00 2001 From: Shungang Li Date: Tue, 30 Apr 2024 09:53:20 +0800 Subject: [PATCH 02/33] fix: geo regex multipoint with paren --- source/libs/geometry/src/geosWrapper.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/source/libs/geometry/src/geosWrapper.c b/source/libs/geometry/src/geosWrapper.c index 9111f1cd6a..c7c83f4796 100644 --- a/source/libs/geometry/src/geosWrapper.c +++ b/source/libs/geometry/src/geosWrapper.c @@ -106,11 +106,16 @@ static int initWktRegex(pcre2_code **ppRegex, pcre2_match_data **ppMatchData) { "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?(( " "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?){1,3}( *))*( *)\\)))( *))*( " "*)\\)))|multipoint( *)z?m?( *)((empty)|(\\(( " + "*)((([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?(( " + "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?){1,3}|((empty)|(\\(( " "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?(( " - "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?){1,3}(( *)(,)( " + "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?){1,3}( *)\\))))(( *)(,)( " + "*)((([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?(( " + "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?){1,3}|((empty)|(\\(( " + "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?(( " + "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?){1,3}( *)\\))))( *))*( " + "*)\\)))|multilinestring( *)z?m?( *)((empty)|(\\(( *)((empty)|(\\(( " "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?(( " - "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?){1,3}( *))*( *)\\)))|multilinestring( " - "*)z?m?( *)((empty)|(\\(( *)((empty)|(\\(( *)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?(( " "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?){1,3}(( *)(,)( " "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?(( " "*)(([-+]?[0-9]+\\.?[0-9]*)|([-+]?[0-9]*\\.?[0-9]+))(e[-+]?[0-9]+)?){1,3}( *))*( *)\\)))(( *)(,)( " From 697ca8914e06e6cf13be4ec71d304aca0bbecea1 Mon Sep 17 00:00:00 2001 From: yihaoDeng Date: Sat, 22 Jun 2024 11:35:47 +0800 Subject: [PATCH 03/33] enh compress --- source/common/src/tcol.c | 7 +- source/common/src/tglobal.c | 65 +- source/dnode/mgmt/node_mgmt/src/dmMgmt.c | 10 +- source/util/src/tcompression.c | 29 +- utils/test/c/tsz_test.c | 2666 +++++++++++++++++++--- 5 files changed, 2354 insertions(+), 423 deletions(-) diff --git a/source/common/src/tcol.c b/source/common/src/tcol.c index 90420b7441..fc9dd1fb4c 100644 --- a/source/common/src/tcol.c +++ b/source/common/src/tcol.c @@ -250,7 +250,7 @@ bool checkColumnEncodeOrSetDefault(uint8_t type, char encode[TSDB_CL_COMPRESS_OP strncpy(encode, getDefaultEncodeStr(type), TSDB_CL_COMPRESS_OPTION_LEN); return true; } - return checkColumnEncode(encode); + return checkColumnEncode(encode) && validColEncode(type, columnEncodeVal(encode)); } bool checkColumnCompress(char compress[TSDB_CL_COMPRESS_OPTION_LEN]) { if (0 == strlen(compress)) return true; @@ -267,7 +267,8 @@ bool checkColumnCompressOrSetDefault(uint8_t type, char compress[TSDB_CL_COMPRES strncpy(compress, getDefaultCompressStr(type), TSDB_CL_COMPRESS_OPTION_LEN); return true; } - return checkColumnCompress(compress); + + return checkColumnCompress(compress) && validColCompress(type, columnCompressVal(compress)); } bool checkColumnLevel(char level[TSDB_CL_COMPRESS_OPTION_LEN]) { if (0 == strlen(level)) return true; @@ -288,7 +289,7 @@ bool checkColumnLevelOrSetDefault(uint8_t type, char level[TSDB_CL_COMPRESS_OPTI strncpy(level, getDefaultLevelStr(type), TSDB_CL_COMPRESS_OPTION_LEN); return true; } - return checkColumnLevel(level); + return checkColumnLevel(level) && validColCompressLevel(type, columnLevelVal(level)); } void setColEncode(uint32_t* compress, uint8_t l1) { diff --git a/source/common/src/tglobal.c b/source/common/src/tglobal.c index 87b72bdead..fa4e60eb89 100644 --- a/source/common/src/tglobal.c +++ b/source/common/src/tglobal.c @@ -32,22 +32,22 @@ SConfig *tsCfg = NULL; // cluster -char tsFirst[TSDB_EP_LEN] = {0}; -char tsSecond[TSDB_EP_LEN] = {0}; -char tsLocalFqdn[TSDB_FQDN_LEN] = {0}; -char tsLocalEp[TSDB_EP_LEN] = {0}; // Local End Point, hostname:port -char tsVersionName[16] = "community"; -uint16_t tsServerPort = 6030; -int32_t tsVersion = 30000000; -int32_t tsStatusInterval = 1; // second -int32_t tsNumOfSupportVnodes = 256; -char tsEncryptAlgorithm[16] = {0}; -char tsEncryptScope[100] = {0}; -EEncryptAlgor tsiEncryptAlgorithm = 0; -EEncryptScope tsiEncryptScope = 0; -//char tsAuthCode[500] = {0}; -//char tsEncryptKey[17] = {0}; -char tsEncryptKey[17] = {0}; +char tsFirst[TSDB_EP_LEN] = {0}; +char tsSecond[TSDB_EP_LEN] = {0}; +char tsLocalFqdn[TSDB_FQDN_LEN] = {0}; +char tsLocalEp[TSDB_EP_LEN] = {0}; // Local End Point, hostname:port +char tsVersionName[16] = "community"; +uint16_t tsServerPort = 6030; +int32_t tsVersion = 30000000; +int32_t tsStatusInterval = 1; // second +int32_t tsNumOfSupportVnodes = 256; +char tsEncryptAlgorithm[16] = {0}; +char tsEncryptScope[100] = {0}; +EEncryptAlgor tsiEncryptAlgorithm = 0; +EEncryptScope tsiEncryptScope = 0; +// char tsAuthCode[500] = {0}; +// char tsEncryptKey[17] = {0}; +char tsEncryptKey[17] = {0}; // common int32_t tsMaxShellConns = 50000; @@ -127,7 +127,7 @@ bool tsEnableTelem = true; int32_t tsTelemInterval = 43200; char tsTelemServer[TSDB_FQDN_LEN] = "telemetry.tdengine.com"; uint16_t tsTelemPort = 80; -char *tsTelemUri = "/report"; +char * tsTelemUri = "/report"; #ifdef TD_ENTERPRISE bool tsEnableCrashReport = false; @@ -240,8 +240,8 @@ int64_t tsTickPerMin[] = {60000L, 60000000L, 60000000000L}; int64_t tsTickPerHour[] = {3600000L, 3600000000L, 3600000000000L}; // lossy compress 7 -char tsLossyColumns[32] = ""; // "float|double" means all float and double columns can be lossy compressed. set empty - // can close lossy compress. +char tsLossyColumns[32] = "float|double"; // "float|double" means all float and double columns can be lossy compressed. + // set empty can close lossy compress. // below option can take effect when tsLossyColumns not empty float tsFPrecision = 1E-8; // float column precision double tsDPrecision = 1E-16; // double column precision @@ -310,7 +310,7 @@ bool tsExperimental = true; int32_t tsMaxTsmaNum = 3; int32_t tsMaxTsmaCalcDelay = 600; -int64_t tsmaDataDeleteMark = 1000 * 60 * 60 * 24; // in ms, default to 1d +int64_t tsmaDataDeleteMark = 1000 * 60 * 60 * 24; // in ms, default to 1d #ifndef _STORAGE int32_t taosSetTfsCfg(SConfig *pCfg) { @@ -563,11 +563,12 @@ static int32_t taosAddClientCfg(SConfig *pCfg) { if (cfgAddBool(pCfg, "monitor", tsEnableMonitor, CFG_SCOPE_BOTH, CFG_DYN_BOTH) != 0) return -1; if (cfgAddInt32(pCfg, "monitorInterval", tsMonitorInterval, 1, 200000, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1; - if (cfgAddBool(pCfg, "multiResultFunctionStarReturnTags", tsMultiResultFunctionStarReturnTags, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT) != 0) return -1; + if (cfgAddBool(pCfg, "multiResultFunctionStarReturnTags", tsMultiResultFunctionStarReturnTags, CFG_SCOPE_CLIENT, + CFG_DYN_CLIENT) != 0) + return -1; if (cfgAddInt32(pCfg, "countAlwaysReturnValue", tsCountAlwaysReturnValue, 0, 1, CFG_SCOPE_BOTH, CFG_DYN_CLIENT) != 0) return -1; - if (cfgAddInt32(pCfg, "maxTsmaCalcDelay", tsMaxTsmaCalcDelay, 600, 86400, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT) != - 0) + if (cfgAddInt32(pCfg, "maxTsmaCalcDelay", tsMaxTsmaCalcDelay, 600, 86400, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT) != 0) return -1; if (cfgAddInt32(pCfg, "tsmaDataDeleteMark", tsmaDataDeleteMark, 60 * 60 * 1000, INT64_MAX, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT) != 0) @@ -618,11 +619,12 @@ static int32_t taosAddServerCfg(SConfig *pCfg) { tsNumOfSupportVnodes = tsNumOfCores * 2; tsNumOfSupportVnodes = TMAX(tsNumOfSupportVnodes, 2); - if (cfgAddInt32(pCfg, "supportVnodes", tsNumOfSupportVnodes, 0, 4096, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER) != 0) return -1; + if (cfgAddInt32(pCfg, "supportVnodes", tsNumOfSupportVnodes, 0, 4096, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER) != 0) + return -1; if (cfgAddString(pCfg, "encryptAlgorithm", tsEncryptAlgorithm, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; if (cfgAddString(pCfg, "encryptScope", tsEncryptScope, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; - //if (cfgAddString(pCfg, "authCode", tsAuthCode, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; + // if (cfgAddString(pCfg, "authCode", tsAuthCode, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; if (cfgAddInt32(pCfg, "statusInterval", tsStatusInterval, 1, 30, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; if (cfgAddInt32(pCfg, "minSlidingTime", tsMinSlidingTime, 1, 1000000, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT) != 0) @@ -749,8 +751,7 @@ static int32_t taosAddServerCfg(SConfig *pCfg) { if (cfgAddInt32(pCfg, "tmqMaxTopicNum", tmqMaxTopicNum, 1, 10000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER) != 0) return -1; - if (cfgAddInt32(pCfg, "tmqRowSize", tmqRowSize, 1, 1000000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER) != 0) - return -1; + if (cfgAddInt32(pCfg, "tmqRowSize", tmqRowSize, 1, 1000000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER) != 0) return -1; if (cfgAddInt32(pCfg, "maxTsmaNum", tsMaxTsmaNum, 0, 3, CFG_SCOPE_SERVER, CFG_DYN_SERVER) != 0) return -1; if (cfgAddInt32(pCfg, "transPullupInterval", tsTransPullupInterval, 1, 10000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER) != @@ -807,7 +808,6 @@ static int32_t taosAddServerCfg(SConfig *pCfg) { CFG_DYN_ENT_SERVER) != 0) return -1; - if (cfgAddString(pCfg, "lossyColumns", tsLossyColumns, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; if (cfgAddFloat(pCfg, "fPrecision", tsFPrecision, 0.0f, 100000.0f, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; if (cfgAddFloat(pCfg, "dPrecision", tsDPrecision, 0.0f, 1000000.0f, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; if (cfgAddInt32(pCfg, "maxRange", tsMaxRange, 0, 65536, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; @@ -1181,7 +1181,7 @@ static int32_t taosSetServerCfg(SConfig *pCfg) { tsQueryBufferSize = cfgGetItem(pCfg, "queryBufferSize")->i32; tstrncpy(tsEncryptAlgorithm, cfgGetItem(pCfg, "encryptAlgorithm")->str, 16); tstrncpy(tsEncryptScope, cfgGetItem(pCfg, "encryptScope")->str, 100); - //tstrncpy(tsAuthCode, cfgGetItem(pCfg, "authCode")->str, 100); + // tstrncpy(tsAuthCode, cfgGetItem(pCfg, "authCode")->str, 100); tsNumOfRpcThreads = cfgGetItem(pCfg, "numOfRpcThreads")->i32; tsNumOfRpcSessions = cfgGetItem(pCfg, "numOfRpcSessions")->i32; @@ -1268,7 +1268,6 @@ static int32_t taosSetServerCfg(SConfig *pCfg) { tsCacheLazyLoadThreshold = cfgGetItem(pCfg, "cacheLazyLoadThreshold")->i32; - tstrncpy(tsLossyColumns, cfgGetItem(pCfg, "lossyColumns")->str, sizeof(tsLossyColumns)); tsFPrecision = cfgGetItem(pCfg, "fPrecision")->fval; tsDPrecision = cfgGetItem(pCfg, "dPrecision")->fval; tsMaxRange = cfgGetItem(pCfg, "maxRange")->i32; @@ -1453,7 +1452,7 @@ void taosCleanupCfg() { typedef struct { const char *optionName; - void *optionVar; + void * optionVar; } OptionNameAndVar; static int32_t taosCfgSetOption(OptionNameAndVar *pOptions, int32_t optionSize, SConfigItem *pItem, bool isDebugflag) { @@ -1466,7 +1465,7 @@ static int32_t taosCfgSetOption(OptionNameAndVar *pOptions, int32_t optionSize, switch (pItem->dtype) { case CFG_DTYPE_BOOL: { int32_t flag = pItem->i32; - bool *pVar = pOptions[d].optionVar; + bool * pVar = pOptions[d].optionVar; uInfo("%s set from %d to %d", optName, *pVar, flag); *pVar = flag; terrno = TSDB_CODE_SUCCESS; @@ -1864,7 +1863,7 @@ static void taosSetAllDebugFlag(SConfig *pCfg, int32_t flag) { return; } - SArray *noNeedToSetVars = NULL; + SArray * noNeedToSetVars = NULL; SConfigItem *pItem = cfgGetItem(pCfg, "debugFlag"); if (pItem != NULL) { pItem->i32 = flag; diff --git a/source/dnode/mgmt/node_mgmt/src/dmMgmt.c b/source/dnode/mgmt/node_mgmt/src/dmMgmt.c index 11453fcfef..e6d8663e58 100644 --- a/source/dnode/mgmt/node_mgmt/src/dmMgmt.c +++ b/source/dnode/mgmt/node_mgmt/src/dmMgmt.c @@ -18,12 +18,10 @@ #include "dmNodes.h" #include "index.h" #include "qworker.h" -#include "tstream.h" -#ifdef TD_TSZ #include "tcompression.h" #include "tglobal.h" #include "tgrant.h" -#endif +#include "tstream.h" static bool dmRequireNode(SDnode *pDnode, SMgmtWrapper *pWrapper) { SMgmtInputOpt input = dmBuildMgmtInputOpt(pWrapper); @@ -48,10 +46,8 @@ int32_t dmInitDnode(SDnode *pDnode) { goto _OVER; } -#ifdef TD_TSZ // compress module init tsCompressInit(tsLossyColumns, tsFPrecision, tsDPrecision, tsMaxRange, tsCurRange, (int)tsIfAdtFse, tsCompressor); -#endif pDnode->wrappers[DNODE].func = dmGetMgmtFunc(); pDnode->wrappers[MNODE].func = mmGetMgmtFunc(); @@ -88,7 +84,7 @@ int32_t dmInitDnode(SDnode *pDnode) { streamMetaInit(); dmInitStatusClient(pDnode); - dmInitSyncClient(pDnode); + dmInitSyncClient(pDnode); dmReportStartup("dnode-transport", "initialized"); dDebug("dnode is created, ptr:%p", pDnode); @@ -120,10 +116,8 @@ void dmCleanupDnode(SDnode *pDnode) { indexCleanup(); taosConvDestroy(); -#ifdef TD_TSZ // compress destroy tsCompressExit(); -#endif dDebug("dnode is closed, ptr:%p", pDnode); } diff --git a/source/util/src/tcompression.c b/source/util/src/tcompression.c index da67b68c1c..cc515b1b49 100644 --- a/source/util/src/tcompression.c +++ b/source/util/src/tcompression.c @@ -61,9 +61,7 @@ #include "zstd.h" #endif -#ifdef TD_TSZ #include "td_sz.h" -#endif int32_t tsCompressPlain2(const char *const input, const int32_t nelements, char *const output, const char type); int32_t tsDecompressPlain2(const char *const input, const int32_t nelements, char *const output, const char type); @@ -322,7 +320,6 @@ static const int32_t TEST_NUMBER = 1; #define safeInt64Add(a, b) (((a >= 0) && (b <= INT64_MAX - a)) || ((a < 0) && (b >= INT64_MIN - a))) -#ifdef TD_TSZ bool lossyFloat = false; bool lossyDouble = false; @@ -341,8 +338,6 @@ int32_t tsCompressInit(char *lossyColumns, float fPrecision, double dPrecision, // exit call void tsCompressExit() { tdszExit(); } -#endif - /* * Compress Integer (Simple8B). */ @@ -352,8 +347,8 @@ int32_t tsCompressINTImp(const char *const input, const int32_t nelements, char char bit_per_integer[] = {0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 15, 20, 30, 60}; int32_t selector_to_elems[] = {240, 120, 60, 30, 20, 15, 12, 10, 8, 7, 6, 5, 4, 3, 2, 1}; char bit_to_selector[] = {0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 11, 11, 12, 12, 12, 13, 13, 13, 13, 13, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15}; + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15}; // get the byte limit. int32_t word_length = getWordLength(type); @@ -1075,7 +1070,7 @@ void encodeFloatValue(uint32_t diff, uint8_t flag, char *const output, int32_t * } int32_t tsCompressFloatImp(const char *const input, const int32_t nelements, char *const output) { - float *istream = (float *)input; + float * istream = (float *)input; int32_t byte_limit = nelements * FLOAT_BYTES + 1; int32_t opos = 1; @@ -1214,7 +1209,6 @@ int32_t tsDecompressFloatImp(const char *const input, const int32_t nelements, c return nelements * FLOAT_BYTES; } -#ifdef TD_TSZ // // ---------- float double lossy ----------- // @@ -1283,7 +1277,6 @@ int32_t tsDecompressDoubleLossyImp(const char *input, int32_t compressedSize, co // decompressed with sz return tdszDecompress(SZ_DOUBLE, input + 1, compressedSize - 1, nelements, output); } -#endif #ifdef BUILD_NO_CALL /************************************************************************* @@ -2463,13 +2456,11 @@ int32_t tsDecompressTimestamp(void *pIn, int32_t nIn, int32_t nEle, void *pOut, // Float ===================================================== int32_t tsCompressFloat(void *pIn, int32_t nIn, int32_t nEle, void *pOut, int32_t nOut, uint8_t cmprAlg, void *pBuf, int32_t nBuf) { -#ifdef TD_TSZ // lossy mode if (lossyFloat) { return tsCompressFloatLossyImp(pIn, nEle, pOut); // lossless mode } else { -#endif if (cmprAlg == ONE_STAGE_COMP) { return tsCompressFloatImp(pIn, nEle, pOut); } else if (cmprAlg == TWO_STAGE_COMP) { @@ -2479,19 +2470,15 @@ int32_t tsCompressFloat(void *pIn, int32_t nIn, int32_t nEle, void *pOut, int32_ ASSERTS(0, "compress algo invalid"); return -1; } -#ifdef TD_TSZ } -#endif } int32_t tsDecompressFloat(void *pIn, int32_t nIn, int32_t nEle, void *pOut, int32_t nOut, uint8_t cmprAlg, void *pBuf, int32_t nBuf) { -#ifdef TD_TSZ if (HEAD_ALGO(((uint8_t *)pIn)[0]) == ALGO_SZ_LOSSY) { // decompress lossy return tsDecompressFloatLossyImp(pIn, nIn, nEle, pOut); } else { -#endif // decompress lossless if (cmprAlg == ONE_STAGE_COMP) { return tsDecompressFloatImp(pIn, nEle, pOut); @@ -2502,20 +2489,16 @@ int32_t tsDecompressFloat(void *pIn, int32_t nIn, int32_t nEle, void *pOut, int3 ASSERTS(0, "compress algo invalid"); return -1; } -#ifdef TD_TSZ } -#endif } // Double ===================================================== int32_t tsCompressDouble(void *pIn, int32_t nIn, int32_t nEle, void *pOut, int32_t nOut, uint8_t cmprAlg, void *pBuf, int32_t nBuf) { -#ifdef TD_TSZ if (lossyDouble) { // lossy mode return tsCompressDoubleLossyImp(pIn, nEle, pOut); } else { -#endif // lossless mode if (cmprAlg == ONE_STAGE_COMP) { return tsCompressDoubleImp(pIn, nEle, pOut); @@ -2526,19 +2509,15 @@ int32_t tsCompressDouble(void *pIn, int32_t nIn, int32_t nEle, void *pOut, int32 ASSERTS(0, "compress algo invalid"); return -1; } -#ifdef TD_TSZ } -#endif } int32_t tsDecompressDouble(void *pIn, int32_t nIn, int32_t nEle, void *pOut, int32_t nOut, uint8_t cmprAlg, void *pBuf, int32_t nBuf) { -#ifdef TD_TSZ if (HEAD_ALGO(((uint8_t *)pIn)[0]) == ALGO_SZ_LOSSY) { // decompress lossy return tsDecompressDoubleLossyImp(pIn, nIn, nEle, pOut); } else { -#endif // decompress lossless if (cmprAlg == ONE_STAGE_COMP) { return tsDecompressDoubleImp(pIn, nEle, pOut); @@ -2549,9 +2528,7 @@ int32_t tsDecompressDouble(void *pIn, int32_t nIn, int32_t nEle, void *pOut, int ASSERTS(0, "compress algo invalid"); return -1; } -#ifdef TD_TSZ } -#endif } // Binary ===================================================== diff --git a/utils/test/c/tsz_test.c b/utils/test/c/tsz_test.c index ee17ecb8f6..063186ee52 100644 --- a/utils/test/c/tsz_test.c +++ b/utils/test/c/tsz_test.c @@ -18,12 +18,9 @@ #include #include - -#if defined(WINDOWS) -int main(int argc, char *argv[]) { - printf("welcome to use taospack tools v1.3 for windows.\n"); -} -#elif !defined(TD_TSZ) +#if defined(WINDOWS) +int main(int argc, char *argv[]) { printf("welcome to use taospack tools v1.3 for windows.\n"); } +#elif !defined(TD_TSZ) int main(int argc, char *argv[]) { printf(" welcome taospack. \n You not open TSZ , please define TD_TSZ to open TSZ algo.\n"); } @@ -33,72 +30,2074 @@ int main(int argc, char *argv[]) { #include "tcompression.h" #include "tdataformat.h" - - // ------- define ----------- -#define FT_CNT 8 +#define FT_CNT 8 // ------- function declare -------- -void cost_start(); +void cost_start(); double cost_end(const char* tag); -int notsame_cnt = 0; +int notsame_cnt = 0; // ------- global declare ----------- -float g_ft1[ ] = {\ - 3.8959999084472656, 3.8970000743865967, 3.8980000019073486, 3.8980000019073486, 3.8970000743865967, 3.8970000743865967, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8980000019073486, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8980000019073486, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8980000019073486, 3.8949999809265137, 3.8980000019073486, 3.8970000743865967, 3.8970000743865967, 3.8970000743865967, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8980000019073486, 3.8949999809265137, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8980000019073486, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8980000019073486, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8980000019073486, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8980000019073486, 3.8949999809265137, 3.8959999084472656, 3.8980000019073486, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8980000019073486, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8980000019073486, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8989999294281006, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.9010000228881836, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8980000019073486, 3.8970000743865967, 3.8989999294281006, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617\ - ,3.8949999809265137, 3.8970000743865967, 3.8980000019073486, 3.8980000019073486, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8940000534057617, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8940000534057617, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8929998874664307, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.9000000953674316, 3.8940000534057617, 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307\ - ,3.8949999809265137, 3.8970000743865967, 3.8980000019073486, 3.8980000019073486, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8940000534057617, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8940000534057617, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8929998874664307, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.9000000953674316, 3.8940000534057617, 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307\ - ,3.8949999809265137, 3.8970000743865967, 3.8980000019073486, 3.8980000019073486, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8940000534057617, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8940000534057617, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8929998874664307, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.9000000953674316, 3.8940000534057617, 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307\ - ,3.8940000534057617, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8929998874664307, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8929998874664307, 3.8959999084472656, 3.8929998874664307, 3.8949999809265137, 3.8929998874664307, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8940000534057617, 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8919999599456787, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8989999294281006, 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, 3.8919999599456787, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8929998874664307, 3.8919999599456787\ - ,3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.632999897003174, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.63100004196167, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.632999897003174, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.63100004196167, 3.63100004196167, 3.63100004196167, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.63100004196167, 3.630000114440918, 3.631999969482422, 3.63100004196167, 3.632999897003174, 3.632999897003174, 3.63100004196167, 3.63100004196167, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.63100004196167, 3.63100004196167, 3.631999969482422, 3.632999897003174, 3.63100004196167, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.63100004196167, 3.63100004196167, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.631999969482422\ - ,3.8940000534057617, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8929998874664307, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8929998874664307, 3.8959999084472656, 3.8929998874664307, 3.8949999809265137, 3.8929998874664307, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8940000534057617, 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8919999599456787, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8989999294281006, 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, 3.8919999599456787, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8929998874664307, 3.8919999599456787\ - ,3.8940000534057617, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8929998874664307, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8929998874664307, 3.8959999084472656, 3.8929998874664307, 3.8949999809265137, 3.8929998874664307, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8940000534057617, 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8919999599456787, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8989999294281006, 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, 3.8919999599456787, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8929998874664307, 3.8919999599456787\ - ,3.7060000896453857, 3.7070000171661377, 3.7079999446868896, 3.7090001106262207, 3.7070000171661377, 3.7070000171661377, 3.7060000896453857, 3.7060000896453857, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7060000896453857, 3.7079999446868896, 3.7079999446868896, 3.7079999446868896, 3.7070000171661377, 3.7079999446868896, 3.7060000896453857, 3.7060000896453857, 3.7060000896453857, 3.7060000896453857, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7060000896453857, 3.7079999446868896, 3.7060000896453857, 3.7079999446868896, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7060000896453857, 3.7079999446868896, 3.7100000381469727, 3.7109999656677246, 3.7119998931884766, 3.7070000171661377, 3.7060000896453857, 3.7079999446868896, 3.7090001106262207, 3.7100000381469727, 3.7119998931884766, 3.7090001106262207, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7060000896453857, 3.7100000381469727, 3.7079999446868896, 3.7060000896453857, 3.7049999237060547, 3.7070000171661377, 3.7070000171661377, 3.7100000381469727, 3.7119998931884766, 3.7119998931884766, 3.7090001106262207, 3.7079999446868896, 3.7070000171661377, 3.7139999866485596, 3.7109999656677246, 3.7109999656677246, 3.7100000381469727, 3.7070000171661377, 3.7060000896453857, 3.7119998931884766, 3.7109999656677246, 3.7090001106262207, 3.7079999446868896, 3.7070000171661377, 3.7070000171661377, 3.7130000591278076, 3.7100000381469727, 3.7079999446868896, 3.7070000171661377, 3.7060000896453857, 3.7070000171661377, 3.7070000171661377, 3.7090001106262207, 3.7119998931884766, 3.7130000591278076, 3.7109999656677246, 3.7079999446868896, 3.7090001106262207, 3.7090001106262207, 3.7119998931884766, 3.7109999656677246, 3.7109999656677246, 3.7079999446868896, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7060000896453857, 3.7079999446868896, 3.7070000171661377, 3.7060000896453857, 3.7060000896453857, 3.7060000896453857, 3.7070000171661377, 3.7079999446868896, 3.7070000171661377, 3.7090001106262207, 3.7109999656677246, 3.7119998931884766, 3.7109999656677246, 3.7090001106262207, 3.7079999446868896, 3.7079999446868896, 3.7100000381469727, 3.7109999656677246, 3.7119998931884766, 3.7079999446868896, 3.7079999446868896, 3.7060000896453857, 3.7070000171661377, 3.7079999446868896, 3.7090001106262207, 3.7100000381469727, 3.7070000171661377, 3.7060000896453857, 3.7070000171661377, 3.7079999446868896, 3.7079999446868896, 3.7100000381469727, 3.7070000171661377, 3.7070000171661377, 3.7060000896453857, 3.7070000171661377, 3.7090001106262207, 3.7100000381469727, 3.7090001106262207, 3.7060000896453857, 3.7070000171661377, 3.7060000896453857, 3.7070000171661377, 3.7079999446868896, 3.7090001106262207, 3.7070000171661377, 3.7079999446868896, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7090001106262207, 3.7070000171661377, 3.7060000896453857, 3.7070000171661377, 3.7070000171661377, 3.7079999446868896, 3.7070000171661377, 3.7060000896453857, 3.7060000896453857, 3.7070000171661377, 3.7060000896453857, 3.7070000171661377, 3.7060000896453857, 3.7079999446868896, 3.7060000896453857, 3.7060000896453857, 3.7060000896453857, 3.7060000896453857, 3.7079999446868896, 3.7070000171661377, 3.7070000171661377, 3.7079999446868896, 3.7060000896453857, 3.7060000896453857, 3.7109999656677246, 3.7070000171661377, 3.7060000896453857, 3.7060000896453857, 3.7049999237060547, 3.7070000171661377, 3.7100000381469727, 3.7079999446868896, 3.7070000171661377, 3.7070000171661377, 3.7079999446868896, 3.7079999446868896, 3.7149999141693115, 3.7079999446868896, 3.7070000171661377, 3.7049999237060547, 3.7060000896453857, 3.7060000896453857\ - ,3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.63100004196167, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.63100004196167, 3.632999897003174, 3.632999897003174, 3.63100004196167, 3.63100004196167, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.63100004196167, 3.631999969482422, 3.632999897003174, 3.634000062942505, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.63100004196167, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.63100004196167, 3.63100004196167, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.63100004196167, 3.63100004196167, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.631999969482422 - ,3.8959999084472656, 3.8970000743865967, 3.8980000019073486, 3.8980000019073486, 3.8970000743865967, 3.8970000743865967, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8980000019073486, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8980000019073486, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8980000019073486, 3.8949999809265137, 3.8980000019073486, 3.8970000743865967, 3.8970000743865967, 3.8970000743865967, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8980000019073486, 3.8949999809265137, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8980000019073486, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8980000019073486, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8980000019073486, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8980000019073486, 3.8949999809265137, 3.8959999084472656, 3.8980000019073486, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8980000019073486, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8980000019073486, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8989999294281006, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.9010000228881836, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8980000019073486, 3.8970000743865967, 3.8989999294281006, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617\ - ,3.8949999809265137, 3.8970000743865967, 3.8980000019073486, 3.8980000019073486, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8940000534057617, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8940000534057617, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8929998874664307, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.9000000953674316, 3.8940000534057617, 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307\ - ,3.8949999809265137, 3.8970000743865967, 3.8980000019073486, 3.8980000019073486, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8940000534057617, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8940000534057617, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8929998874664307, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.9000000953674316, 3.8940000534057617, 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307\ - ,3.8949999809265137, 3.8970000743865967, 3.8980000019073486, 3.8980000019073486, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8940000534057617, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8940000534057617, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8929998874664307, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.9000000953674316, 3.8940000534057617, 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307\ - ,3.8940000534057617, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8929998874664307, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8929998874664307, 3.8959999084472656, 3.8929998874664307, 3.8949999809265137, 3.8929998874664307, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8940000534057617, 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8919999599456787, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8989999294281006, 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, 3.8919999599456787, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8929998874664307, 3.8919999599456787\ - ,3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.632999897003174, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.63100004196167, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.632999897003174, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.63100004196167, 3.63100004196167, 3.63100004196167, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.63100004196167, 3.630000114440918, 3.631999969482422, 3.63100004196167, 3.632999897003174, 3.632999897003174, 3.63100004196167, 3.63100004196167, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.63100004196167, 3.63100004196167, 3.631999969482422, 3.632999897003174, 3.63100004196167, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.63100004196167, 3.63100004196167, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.631999969482422\ - ,3.8940000534057617, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8929998874664307, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8929998874664307, 3.8959999084472656, 3.8929998874664307, 3.8949999809265137, 3.8929998874664307, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8940000534057617, 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8919999599456787, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8989999294281006, 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, 3.8919999599456787, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8929998874664307, 3.8919999599456787\ - ,3.8940000534057617, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8929998874664307, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8929998874664307, 3.8959999084472656, 3.8929998874664307, 3.8949999809265137, 3.8929998874664307, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8940000534057617, 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8919999599456787, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8989999294281006, 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, 3.8919999599456787, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8929998874664307, 3.8919999599456787\ - ,3.7060000896453857, 3.7070000171661377, 3.7079999446868896, 3.7090001106262207, 3.7070000171661377, 3.7070000171661377, 3.7060000896453857, 3.7060000896453857, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7060000896453857, 3.7079999446868896, 3.7079999446868896, 3.7079999446868896, 3.7070000171661377, 3.7079999446868896, 3.7060000896453857, 3.7060000896453857, 3.7060000896453857, 3.7060000896453857, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7060000896453857, 3.7079999446868896, 3.7060000896453857, 3.7079999446868896, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7060000896453857, 3.7079999446868896, 3.7100000381469727, 3.7109999656677246, 3.7119998931884766, 3.7070000171661377, 3.7060000896453857, 3.7079999446868896, 3.7090001106262207, 3.7100000381469727, 3.7119998931884766, 3.7090001106262207, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7060000896453857, 3.7100000381469727, 3.7079999446868896, 3.7060000896453857, 3.7049999237060547, 3.7070000171661377, 3.7070000171661377, 3.7100000381469727, 3.7119998931884766, 3.7119998931884766, 3.7090001106262207, 3.7079999446868896, 3.7070000171661377, 3.7139999866485596, 3.7109999656677246, 3.7109999656677246, 3.7100000381469727, 3.7070000171661377, 3.7060000896453857, 3.7119998931884766, 3.7109999656677246, 3.7090001106262207, 3.7079999446868896, 3.7070000171661377, 3.7070000171661377, 3.7130000591278076, 3.7100000381469727, 3.7079999446868896, 3.7070000171661377, 3.7060000896453857, 3.7070000171661377, 3.7070000171661377, 3.7090001106262207, 3.7119998931884766, 3.7130000591278076, 3.7109999656677246, 3.7079999446868896, 3.7090001106262207, 3.7090001106262207, 3.7119998931884766, 3.7109999656677246, 3.7109999656677246, 3.7079999446868896, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7060000896453857, 3.7079999446868896, 3.7070000171661377, 3.7060000896453857, 3.7060000896453857, 3.7060000896453857, 3.7070000171661377, 3.7079999446868896, 3.7070000171661377, 3.7090001106262207, 3.7109999656677246, 3.7119998931884766, 3.7109999656677246, 3.7090001106262207, 3.7079999446868896, 3.7079999446868896, 3.7100000381469727, 3.7109999656677246, 3.7119998931884766, 3.7079999446868896, 3.7079999446868896, 3.7060000896453857, 3.7070000171661377, 3.7079999446868896, 3.7090001106262207, 3.7100000381469727, 3.7070000171661377, 3.7060000896453857, 3.7070000171661377, 3.7079999446868896, 3.7079999446868896, 3.7100000381469727, 3.7070000171661377, 3.7070000171661377, 3.7060000896453857, 3.7070000171661377, 3.7090001106262207, 3.7100000381469727, 3.7090001106262207, 3.7060000896453857, 3.7070000171661377, 3.7060000896453857, 3.7070000171661377, 3.7079999446868896, 3.7090001106262207, 3.7070000171661377, 3.7079999446868896, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7090001106262207, 3.7070000171661377, 3.7060000896453857, 3.7070000171661377, 3.7070000171661377, 3.7079999446868896, 3.7070000171661377, 3.7060000896453857, 3.7060000896453857, 3.7070000171661377, 3.7060000896453857, 3.7070000171661377, 3.7060000896453857, 3.7079999446868896, 3.7060000896453857, 3.7060000896453857, 3.7060000896453857, 3.7060000896453857, 3.7079999446868896, 3.7070000171661377, 3.7070000171661377, 3.7079999446868896, 3.7060000896453857, 3.7060000896453857, 3.7109999656677246, 3.7070000171661377, 3.7060000896453857, 3.7060000896453857, 3.7049999237060547, 3.7070000171661377, 3.7100000381469727, 3.7079999446868896, 3.7070000171661377, 3.7070000171661377, 3.7079999446868896, 3.7079999446868896, 3.7149999141693115, 3.7079999446868896, 3.7070000171661377, 3.7049999237060547, 3.7060000896453857, 3.7060000896453857\ - ,3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.63100004196167, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.63100004196167, 3.632999897003174, 3.632999897003174, 3.63100004196167, 3.63100004196167, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.63100004196167, 3.631999969482422, 3.632999897003174, 3.634000062942505, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.63100004196167, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.63100004196167, 3.63100004196167, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.63100004196167, 3.63100004196167, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.631999969482422 - }; +float g_ft1[] = {3.8959999084472656, 3.8970000743865967, 3.8980000019073486, 3.8980000019073486, 3.8970000743865967, + 3.8970000743865967, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, + 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8980000019073486, + 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8980000019073486, 3.8959999084472656, + 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8970000743865967, 3.8959999084472656, + 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, + 3.8980000019073486, 3.8949999809265137, 3.8980000019073486, 3.8970000743865967, 3.8970000743865967, + 3.8970000743865967, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, + 3.8959999084472656, 3.8970000743865967, 3.8980000019073486, 3.8949999809265137, 3.8970000743865967, + 3.8970000743865967, 3.8959999084472656, 3.8980000019073486, 3.8970000743865967, 3.8959999084472656, + 3.8970000743865967, 3.8980000019073486, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, + 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8970000743865967, + 3.8970000743865967, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, + 3.8970000743865967, 3.8980000019073486, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8970000743865967, 3.8980000019073486, 3.8949999809265137, 3.8959999084472656, + 3.8980000019073486, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, + 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, + 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8980000019073486, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, + 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8980000019073486, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, + 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, + 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, + 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8989999294281006, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, + 3.8949999809265137, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, + 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8959999084472656, + 3.8970000743865967, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.9010000228881836, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, + 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8980000019073486, + 3.8970000743865967, 3.8989999294281006, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, + 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8970000743865967, 3.8980000019073486, + 3.8980000019073486, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, + 3.8949999809265137, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, + 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, + 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8940000534057617, 3.8970000743865967, + 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, + 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, + 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, + 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, + 3.8940000534057617, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8940000534057617, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, + 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, + 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8929998874664307, 3.8959999084472656, + 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8959999084472656, + 3.8970000743865967, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, + 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, + 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, + 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, + 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, + 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, + 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, + 3.8949999809265137, 3.9000000953674316, 3.8940000534057617, 3.8929998874664307, 3.8929998874664307, + 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8980000019073486, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, + 3.8970000743865967, 3.8980000019073486, 3.8980000019073486, 3.8959999084472656, 3.8959999084472656, + 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8970000743865967, 3.8970000743865967, + 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, + 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, + 3.8940000534057617, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, + 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, + 3.8959999084472656, 3.8970000743865967, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, + 3.8949999809265137, 3.8970000743865967, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, + 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8970000743865967, 3.8940000534057617, 3.8959999084472656, 3.8970000743865967, + 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, + 3.8929998874664307, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, + 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8949999809265137, + 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, + 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, + 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8940000534057617, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8929998874664307, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, + 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.9000000953674316, 3.8940000534057617, + 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, + 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, + 3.8929998874664307, 3.8949999809265137, 3.8970000743865967, 3.8980000019073486, 3.8980000019073486, + 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, + 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, + 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, + 3.8949999809265137, 3.8970000743865967, 3.8940000534057617, 3.8970000743865967, 3.8959999084472656, + 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8940000534057617, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8959999084472656, + 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, + 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, + 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8940000534057617, + 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8940000534057617, 3.8929998874664307, 3.8959999084472656, 3.8940000534057617, + 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, + 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, + 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, + 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8970000743865967, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8959999084472656, + 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8980000019073486, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, + 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, + 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, + 3.9000000953674316, 3.8940000534057617, 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, + 3.8959999084472656, 3.8959999084472656, 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8959999084472656, + 3.8970000743865967, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, + 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, + 3.8929998874664307, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, + 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, + 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, + 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8959999084472656, 3.8929998874664307, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, + 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, + 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, + 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8929998874664307, + 3.8959999084472656, 3.8929998874664307, 3.8949999809265137, 3.8929998874664307, 3.8959999084472656, + 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, + 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, + 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, + 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, + 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, + 3.8940000534057617, 3.8970000743865967, 3.8940000534057617, 3.8929998874664307, 3.8929998874664307, + 3.8929998874664307, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, + 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, + 3.8929998874664307, 3.8919999599456787, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, + 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, 3.8929998874664307, 3.8940000534057617, + 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, + 3.8929998874664307, 3.8940000534057617, 3.8989999294281006, 3.8929998874664307, 3.8929998874664307, + 3.8929998874664307, 3.8919999599456787, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, + 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8929998874664307, 3.8919999599456787, + 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.632999897003174, + 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, + 3.63100004196167, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, + 3.631999969482422, 3.632999897003174, 3.63100004196167, 3.631999969482422, 3.631999969482422, + 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, + 3.63100004196167, 3.63100004196167, 3.63100004196167, 3.632999897003174, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, + 3.632999897003174, 3.63100004196167, 3.630000114440918, 3.631999969482422, 3.63100004196167, + 3.632999897003174, 3.632999897003174, 3.63100004196167, 3.63100004196167, 3.632999897003174, + 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.63100004196167, 3.631999969482422, + 3.631999969482422, 3.63100004196167, 3.632999897003174, 3.632999897003174, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.63100004196167, + 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, + 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.63100004196167, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, + 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, + 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.632999897003174, + 3.63100004196167, 3.63100004196167, 3.631999969482422, 3.632999897003174, 3.63100004196167, + 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.631999969482422, + 3.63100004196167, 3.63100004196167, 3.631999969482422, 3.632999897003174, 3.631999969482422, + 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.63100004196167, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, + 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, + 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.63100004196167, 3.631999969482422, + 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, + 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, + 3.632999897003174, 3.631999969482422, 3.8940000534057617, 3.8959999084472656, 3.8970000743865967, + 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, + 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, + 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, + 3.8959999084472656, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, + 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8929998874664307, + 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, + 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, + 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, + 3.8929998874664307, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8929998874664307, + 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, + 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, + 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8929998874664307, 3.8959999084472656, + 3.8929998874664307, 3.8949999809265137, 3.8929998874664307, 3.8959999084472656, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, + 3.8940000534057617, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, + 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, + 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, + 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, + 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, + 3.8970000743865967, 3.8940000534057617, 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, + 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, + 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, + 3.8919999599456787, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, + 3.8949999809265137, 3.8929998874664307, 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, + 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, + 3.8940000534057617, 3.8989999294281006, 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, + 3.8919999599456787, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8940000534057617, + 3.8940000534057617, 3.8940000534057617, 3.8929998874664307, 3.8919999599456787, 3.8940000534057617, + 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, + 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, + 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8929998874664307, + 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, + 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8959999084472656, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, + 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, + 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, + 3.8949999809265137, 3.8959999084472656, 3.8929998874664307, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, + 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, + 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, + 3.8929998874664307, 3.8959999084472656, 3.8929998874664307, 3.8949999809265137, 3.8929998874664307, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, + 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8949999809265137, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, + 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, + 3.8949999809265137, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8940000534057617, 3.8929998874664307, + 3.8929998874664307, 3.8929998874664307, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, + 3.8940000534057617, 3.8929998874664307, 3.8919999599456787, 3.8929998874664307, 3.8940000534057617, + 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, 3.8929998874664307, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8989999294281006, 3.8929998874664307, + 3.8929998874664307, 3.8929998874664307, 3.8919999599456787, 3.8940000534057617, 3.8940000534057617, + 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8970000743865967, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8929998874664307, + 3.8919999599456787, 3.7060000896453857, 3.7070000171661377, 3.7079999446868896, 3.7090001106262207, + 3.7070000171661377, 3.7070000171661377, 3.7060000896453857, 3.7060000896453857, 3.7070000171661377, + 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7060000896453857, + 3.7079999446868896, 3.7079999446868896, 3.7079999446868896, 3.7070000171661377, 3.7079999446868896, + 3.7060000896453857, 3.7060000896453857, 3.7060000896453857, 3.7060000896453857, 3.7070000171661377, + 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, + 3.7060000896453857, 3.7079999446868896, 3.7060000896453857, 3.7079999446868896, 3.7070000171661377, + 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7060000896453857, 3.7079999446868896, + 3.7100000381469727, 3.7109999656677246, 3.7119998931884766, 3.7070000171661377, 3.7060000896453857, + 3.7079999446868896, 3.7090001106262207, 3.7100000381469727, 3.7119998931884766, 3.7090001106262207, + 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7060000896453857, + 3.7100000381469727, 3.7079999446868896, 3.7060000896453857, 3.7049999237060547, 3.7070000171661377, + 3.7070000171661377, 3.7100000381469727, 3.7119998931884766, 3.7119998931884766, 3.7090001106262207, + 3.7079999446868896, 3.7070000171661377, 3.7139999866485596, 3.7109999656677246, 3.7109999656677246, + 3.7100000381469727, 3.7070000171661377, 3.7060000896453857, 3.7119998931884766, 3.7109999656677246, + 3.7090001106262207, 3.7079999446868896, 3.7070000171661377, 3.7070000171661377, 3.7130000591278076, + 3.7100000381469727, 3.7079999446868896, 3.7070000171661377, 3.7060000896453857, 3.7070000171661377, + 3.7070000171661377, 3.7090001106262207, 3.7119998931884766, 3.7130000591278076, 3.7109999656677246, + 3.7079999446868896, 3.7090001106262207, 3.7090001106262207, 3.7119998931884766, 3.7109999656677246, + 3.7109999656677246, 3.7079999446868896, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, + 3.7070000171661377, 3.7060000896453857, 3.7079999446868896, 3.7070000171661377, 3.7060000896453857, + 3.7060000896453857, 3.7060000896453857, 3.7070000171661377, 3.7079999446868896, 3.7070000171661377, + 3.7090001106262207, 3.7109999656677246, 3.7119998931884766, 3.7109999656677246, 3.7090001106262207, + 3.7079999446868896, 3.7079999446868896, 3.7100000381469727, 3.7109999656677246, 3.7119998931884766, + 3.7079999446868896, 3.7079999446868896, 3.7060000896453857, 3.7070000171661377, 3.7079999446868896, + 3.7090001106262207, 3.7100000381469727, 3.7070000171661377, 3.7060000896453857, 3.7070000171661377, + 3.7079999446868896, 3.7079999446868896, 3.7100000381469727, 3.7070000171661377, 3.7070000171661377, + 3.7060000896453857, 3.7070000171661377, 3.7090001106262207, 3.7100000381469727, 3.7090001106262207, + 3.7060000896453857, 3.7070000171661377, 3.7060000896453857, 3.7070000171661377, 3.7079999446868896, + 3.7090001106262207, 3.7070000171661377, 3.7079999446868896, 3.7070000171661377, 3.7070000171661377, + 3.7070000171661377, 3.7090001106262207, 3.7070000171661377, 3.7060000896453857, 3.7070000171661377, + 3.7070000171661377, 3.7079999446868896, 3.7070000171661377, 3.7060000896453857, 3.7060000896453857, + 3.7070000171661377, 3.7060000896453857, 3.7070000171661377, 3.7060000896453857, 3.7079999446868896, + 3.7060000896453857, 3.7060000896453857, 3.7060000896453857, 3.7060000896453857, 3.7079999446868896, + 3.7070000171661377, 3.7070000171661377, 3.7079999446868896, 3.7060000896453857, 3.7060000896453857, + 3.7109999656677246, 3.7070000171661377, 3.7060000896453857, 3.7060000896453857, 3.7049999237060547, + 3.7070000171661377, 3.7100000381469727, 3.7079999446868896, 3.7070000171661377, 3.7070000171661377, + 3.7079999446868896, 3.7079999446868896, 3.7149999141693115, 3.7079999446868896, 3.7070000171661377, + 3.7049999237060547, 3.7060000896453857, 3.7060000896453857, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, + 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.632999897003174, + 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, + 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, + 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.632999897003174, + 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, + 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, + 3.63100004196167, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.631999969482422, + 3.63100004196167, 3.631999969482422, 3.63100004196167, 3.632999897003174, 3.632999897003174, + 3.63100004196167, 3.63100004196167, 3.632999897003174, 3.632999897003174, 3.632999897003174, + 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, + 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.632999897003174, + 3.632999897003174, 3.63100004196167, 3.631999969482422, 3.632999897003174, 3.634000062942505, + 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.632999897003174, + 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, + 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.63100004196167, 3.63100004196167, + 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.632999897003174, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, + 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.63100004196167, 3.63100004196167, + 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.632999897003174, + 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, + 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.63100004196167, 3.63100004196167, + 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, + 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, + 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, + 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.631999969482422, + 3.8959999084472656, 3.8970000743865967, 3.8980000019073486, 3.8980000019073486, 3.8970000743865967, + 3.8970000743865967, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, + 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8980000019073486, + 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8980000019073486, 3.8959999084472656, + 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8970000743865967, 3.8959999084472656, + 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, + 3.8980000019073486, 3.8949999809265137, 3.8980000019073486, 3.8970000743865967, 3.8970000743865967, + 3.8970000743865967, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, + 3.8959999084472656, 3.8970000743865967, 3.8980000019073486, 3.8949999809265137, 3.8970000743865967, + 3.8970000743865967, 3.8959999084472656, 3.8980000019073486, 3.8970000743865967, 3.8959999084472656, + 3.8970000743865967, 3.8980000019073486, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, + 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8970000743865967, + 3.8970000743865967, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, + 3.8970000743865967, 3.8980000019073486, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8970000743865967, 3.8980000019073486, 3.8949999809265137, 3.8959999084472656, + 3.8980000019073486, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, + 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, + 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8980000019073486, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, + 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8980000019073486, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, + 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, + 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, + 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8989999294281006, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, + 3.8949999809265137, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, + 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8959999084472656, + 3.8970000743865967, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.9010000228881836, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, + 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8980000019073486, + 3.8970000743865967, 3.8989999294281006, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, + 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8970000743865967, 3.8980000019073486, + 3.8980000019073486, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, + 3.8949999809265137, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, + 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, + 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8940000534057617, 3.8970000743865967, + 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, + 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, + 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, + 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, + 3.8940000534057617, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8940000534057617, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, + 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, + 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8929998874664307, 3.8959999084472656, + 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8959999084472656, + 3.8970000743865967, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, + 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, + 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, + 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, + 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, + 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, + 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, + 3.8949999809265137, 3.9000000953674316, 3.8940000534057617, 3.8929998874664307, 3.8929998874664307, + 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8980000019073486, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, + 3.8970000743865967, 3.8980000019073486, 3.8980000019073486, 3.8959999084472656, 3.8959999084472656, + 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8970000743865967, 3.8970000743865967, + 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, + 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, + 3.8940000534057617, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, + 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, + 3.8959999084472656, 3.8970000743865967, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, + 3.8949999809265137, 3.8970000743865967, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, + 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8970000743865967, 3.8940000534057617, 3.8959999084472656, 3.8970000743865967, + 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, + 3.8929998874664307, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, + 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8949999809265137, + 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, + 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, + 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8940000534057617, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8929998874664307, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, + 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.9000000953674316, 3.8940000534057617, + 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, + 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, + 3.8929998874664307, 3.8949999809265137, 3.8970000743865967, 3.8980000019073486, 3.8980000019073486, + 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, + 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, + 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, + 3.8949999809265137, 3.8970000743865967, 3.8940000534057617, 3.8970000743865967, 3.8959999084472656, + 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8940000534057617, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8959999084472656, + 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, + 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, + 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8940000534057617, + 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8940000534057617, 3.8929998874664307, 3.8959999084472656, 3.8940000534057617, + 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, + 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, + 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, + 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8970000743865967, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8959999084472656, + 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8980000019073486, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, + 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, + 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, + 3.9000000953674316, 3.8940000534057617, 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, + 3.8959999084472656, 3.8959999084472656, 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8959999084472656, + 3.8970000743865967, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, + 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, + 3.8929998874664307, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, + 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, + 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, + 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8959999084472656, 3.8929998874664307, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, + 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, + 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, + 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8929998874664307, + 3.8959999084472656, 3.8929998874664307, 3.8949999809265137, 3.8929998874664307, 3.8959999084472656, + 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, + 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, + 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, + 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, + 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, + 3.8940000534057617, 3.8970000743865967, 3.8940000534057617, 3.8929998874664307, 3.8929998874664307, + 3.8929998874664307, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, + 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, + 3.8929998874664307, 3.8919999599456787, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, + 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, 3.8929998874664307, 3.8940000534057617, + 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, + 3.8929998874664307, 3.8940000534057617, 3.8989999294281006, 3.8929998874664307, 3.8929998874664307, + 3.8929998874664307, 3.8919999599456787, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, + 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8929998874664307, 3.8919999599456787, + 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.632999897003174, + 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, + 3.63100004196167, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, + 3.631999969482422, 3.632999897003174, 3.63100004196167, 3.631999969482422, 3.631999969482422, + 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, + 3.63100004196167, 3.63100004196167, 3.63100004196167, 3.632999897003174, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, + 3.632999897003174, 3.63100004196167, 3.630000114440918, 3.631999969482422, 3.63100004196167, + 3.632999897003174, 3.632999897003174, 3.63100004196167, 3.63100004196167, 3.632999897003174, + 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.63100004196167, 3.631999969482422, + 3.631999969482422, 3.63100004196167, 3.632999897003174, 3.632999897003174, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.63100004196167, + 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, + 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.63100004196167, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, + 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, + 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.632999897003174, + 3.63100004196167, 3.63100004196167, 3.631999969482422, 3.632999897003174, 3.63100004196167, + 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.631999969482422, + 3.63100004196167, 3.63100004196167, 3.631999969482422, 3.632999897003174, 3.631999969482422, + 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.63100004196167, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, + 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, + 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.63100004196167, 3.631999969482422, + 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, + 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, + 3.632999897003174, 3.631999969482422, 3.8940000534057617, 3.8959999084472656, 3.8970000743865967, + 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, + 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, + 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, + 3.8959999084472656, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, + 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8929998874664307, + 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, + 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, + 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, + 3.8929998874664307, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8929998874664307, + 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, + 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, + 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8929998874664307, 3.8959999084472656, + 3.8929998874664307, 3.8949999809265137, 3.8929998874664307, 3.8959999084472656, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, + 3.8940000534057617, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, + 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, + 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, + 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, + 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, + 3.8970000743865967, 3.8940000534057617, 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, + 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, + 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, + 3.8919999599456787, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, + 3.8949999809265137, 3.8929998874664307, 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, + 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, + 3.8940000534057617, 3.8989999294281006, 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, + 3.8919999599456787, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8940000534057617, + 3.8940000534057617, 3.8940000534057617, 3.8929998874664307, 3.8919999599456787, 3.8940000534057617, + 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, + 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, + 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8929998874664307, + 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, + 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8959999084472656, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, + 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, + 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, + 3.8949999809265137, 3.8959999084472656, 3.8929998874664307, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, + 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, + 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, + 3.8929998874664307, 3.8959999084472656, 3.8929998874664307, 3.8949999809265137, 3.8929998874664307, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, + 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8949999809265137, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, + 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, + 3.8949999809265137, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8940000534057617, 3.8929998874664307, + 3.8929998874664307, 3.8929998874664307, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, + 3.8940000534057617, 3.8929998874664307, 3.8919999599456787, 3.8929998874664307, 3.8940000534057617, + 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, 3.8929998874664307, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8989999294281006, 3.8929998874664307, + 3.8929998874664307, 3.8929998874664307, 3.8919999599456787, 3.8940000534057617, 3.8940000534057617, + 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8970000743865967, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8929998874664307, + 3.8919999599456787, 3.7060000896453857, 3.7070000171661377, 3.7079999446868896, 3.7090001106262207, + 3.7070000171661377, 3.7070000171661377, 3.7060000896453857, 3.7060000896453857, 3.7070000171661377, + 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7060000896453857, + 3.7079999446868896, 3.7079999446868896, 3.7079999446868896, 3.7070000171661377, 3.7079999446868896, + 3.7060000896453857, 3.7060000896453857, 3.7060000896453857, 3.7060000896453857, 3.7070000171661377, + 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, + 3.7060000896453857, 3.7079999446868896, 3.7060000896453857, 3.7079999446868896, 3.7070000171661377, + 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7060000896453857, 3.7079999446868896, + 3.7100000381469727, 3.7109999656677246, 3.7119998931884766, 3.7070000171661377, 3.7060000896453857, + 3.7079999446868896, 3.7090001106262207, 3.7100000381469727, 3.7119998931884766, 3.7090001106262207, + 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7060000896453857, + 3.7100000381469727, 3.7079999446868896, 3.7060000896453857, 3.7049999237060547, 3.7070000171661377, + 3.7070000171661377, 3.7100000381469727, 3.7119998931884766, 3.7119998931884766, 3.7090001106262207, + 3.7079999446868896, 3.7070000171661377, 3.7139999866485596, 3.7109999656677246, 3.7109999656677246, + 3.7100000381469727, 3.7070000171661377, 3.7060000896453857, 3.7119998931884766, 3.7109999656677246, + 3.7090001106262207, 3.7079999446868896, 3.7070000171661377, 3.7070000171661377, 3.7130000591278076, + 3.7100000381469727, 3.7079999446868896, 3.7070000171661377, 3.7060000896453857, 3.7070000171661377, + 3.7070000171661377, 3.7090001106262207, 3.7119998931884766, 3.7130000591278076, 3.7109999656677246, + 3.7079999446868896, 3.7090001106262207, 3.7090001106262207, 3.7119998931884766, 3.7109999656677246, + 3.7109999656677246, 3.7079999446868896, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, + 3.7070000171661377, 3.7060000896453857, 3.7079999446868896, 3.7070000171661377, 3.7060000896453857, + 3.7060000896453857, 3.7060000896453857, 3.7070000171661377, 3.7079999446868896, 3.7070000171661377, + 3.7090001106262207, 3.7109999656677246, 3.7119998931884766, 3.7109999656677246, 3.7090001106262207, + 3.7079999446868896, 3.7079999446868896, 3.7100000381469727, 3.7109999656677246, 3.7119998931884766, + 3.7079999446868896, 3.7079999446868896, 3.7060000896453857, 3.7070000171661377, 3.7079999446868896, + 3.7090001106262207, 3.7100000381469727, 3.7070000171661377, 3.7060000896453857, 3.7070000171661377, + 3.7079999446868896, 3.7079999446868896, 3.7100000381469727, 3.7070000171661377, 3.7070000171661377, + 3.7060000896453857, 3.7070000171661377, 3.7090001106262207, 3.7100000381469727, 3.7090001106262207, + 3.7060000896453857, 3.7070000171661377, 3.7060000896453857, 3.7070000171661377, 3.7079999446868896, + 3.7090001106262207, 3.7070000171661377, 3.7079999446868896, 3.7070000171661377, 3.7070000171661377, + 3.7070000171661377, 3.7090001106262207, 3.7070000171661377, 3.7060000896453857, 3.7070000171661377, + 3.7070000171661377, 3.7079999446868896, 3.7070000171661377, 3.7060000896453857, 3.7060000896453857, + 3.7070000171661377, 3.7060000896453857, 3.7070000171661377, 3.7060000896453857, 3.7079999446868896, + 3.7060000896453857, 3.7060000896453857, 3.7060000896453857, 3.7060000896453857, 3.7079999446868896, + 3.7070000171661377, 3.7070000171661377, 3.7079999446868896, 3.7060000896453857, 3.7060000896453857, + 3.7109999656677246, 3.7070000171661377, 3.7060000896453857, 3.7060000896453857, 3.7049999237060547, + 3.7070000171661377, 3.7100000381469727, 3.7079999446868896, 3.7070000171661377, 3.7070000171661377, + 3.7079999446868896, 3.7079999446868896, 3.7149999141693115, 3.7079999446868896, 3.7070000171661377, + 3.7049999237060547, 3.7060000896453857, 3.7060000896453857, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, + 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.632999897003174, + 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, + 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, + 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.632999897003174, + 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, + 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, + 3.63100004196167, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.631999969482422, + 3.63100004196167, 3.631999969482422, 3.63100004196167, 3.632999897003174, 3.632999897003174, + 3.63100004196167, 3.63100004196167, 3.632999897003174, 3.632999897003174, 3.632999897003174, + 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, + 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.632999897003174, + 3.632999897003174, 3.63100004196167, 3.631999969482422, 3.632999897003174, 3.634000062942505, + 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.632999897003174, + 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, + 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.63100004196167, 3.63100004196167, + 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.632999897003174, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, + 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.63100004196167, 3.63100004196167, + 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.632999897003174, + 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, + 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.63100004196167, 3.63100004196167, + 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, + 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, + 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, + 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.631999969482422}; -double g_de1[ ] = {\ - 3.895999908447265612345, 3.897000074386596701234, 3.89800000190734860123456789, 3.8980000019073486, 3.8970000743865967, 3.8970000743865967, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8980000019073486, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8980000019073486, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8980000019073486, 3.8949999809265137, 3.8980000019073486, 3.8970000743865967, 3.8970000743865967, 3.8970000743865967, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8980000019073486, 3.8949999809265137, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8980000019073486, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8980000019073486, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8980000019073486, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8980000019073486, 3.8949999809265137, 3.8959999084472656, 3.8980000019073486, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8980000019073486, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8980000019073486, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8989999294281006, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.9010000228881836, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8980000019073486, 3.8970000743865967, 3.8989999294281006, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617\ - ,3.8949999809265137, 3.8970000743865967, 3.8980000019073486, 3.8980000019073486, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8940000534057617, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8940000534057617, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8929998874664307, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.9000000953674316, 3.8940000534057617, 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307\ - ,3.8949999809265137, 3.8970000743865967, 3.8980000019073486, 3.8980000019073486, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8940000534057617, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8940000534057617, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8929998874664307, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.9000000953674316, 3.8940000534057617, 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307\ - ,3.8949999809265137, 3.8970000743865967, 3.8980000019073486, 3.8980000019073486, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8940000534057617, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8940000534057617, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8929998874664307, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.9000000953674316, 3.8940000534057617, 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307\ - ,3.8940000534057617, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8929998874664307, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8929998874664307, 3.8959999084472656, 3.8929998874664307, 3.8949999809265137, 3.8929998874664307, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8940000534057617, 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8919999599456787, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8989999294281006, 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, 3.8919999599456787, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8929998874664307, 3.8919999599456787\ - ,3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.632999897003174, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.63100004196167, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.632999897003174, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.63100004196167, 3.63100004196167, 3.63100004196167, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.63100004196167, 3.630000114440918, 3.631999969482422, 3.63100004196167, 3.632999897003174, 3.632999897003174, 3.63100004196167, 3.63100004196167, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.63100004196167, 3.63100004196167, 3.631999969482422, 3.632999897003174, 3.63100004196167, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.63100004196167, 3.63100004196167, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.631999969482422\ - ,3.8940000534057617, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8929998874664307, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8929998874664307, 3.8959999084472656, 3.8929998874664307, 3.8949999809265137, 3.8929998874664307, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8940000534057617, 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8919999599456787, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8989999294281006, 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, 3.8919999599456787, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8929998874664307, 3.8919999599456787\ - ,3.8940000534057617, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8929998874664307, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8929998874664307, 3.8959999084472656, 3.8929998874664307, 3.8949999809265137, 3.8929998874664307, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8940000534057617, 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8919999599456787, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8989999294281006, 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, 3.8919999599456787, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8929998874664307, 3.8919999599456787\ - ,3.7060000896453857, 3.7070000171661377, 3.7079999446868896, 3.7090001106262207, 3.7070000171661377, 3.7070000171661377, 3.7060000896453857, 3.7060000896453857, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7060000896453857, 3.7079999446868896, 3.7079999446868896, 3.7079999446868896, 3.7070000171661377, 3.7079999446868896, 3.7060000896453857, 3.7060000896453857, 3.7060000896453857, 3.7060000896453857, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7060000896453857, 3.7079999446868896, 3.7060000896453857, 3.7079999446868896, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7060000896453857, 3.7079999446868896, 3.7100000381469727, 3.7109999656677246, 3.7119998931884766, 3.7070000171661377, 3.7060000896453857, 3.7079999446868896, 3.7090001106262207, 3.7100000381469727, 3.7119998931884766, 3.7090001106262207, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7060000896453857, 3.7100000381469727, 3.7079999446868896, 3.7060000896453857, 3.7049999237060547, 3.7070000171661377, 3.7070000171661377, 3.7100000381469727, 3.7119998931884766, 3.7119998931884766, 3.7090001106262207, 3.7079999446868896, 3.7070000171661377, 3.7139999866485596, 3.7109999656677246, 3.7109999656677246, 3.7100000381469727, 3.7070000171661377, 3.7060000896453857, 3.7119998931884766, 3.7109999656677246, 3.7090001106262207, 3.7079999446868896, 3.7070000171661377, 3.7070000171661377, 3.7130000591278076, 3.7100000381469727, 3.7079999446868896, 3.7070000171661377, 3.7060000896453857, 3.7070000171661377, 3.7070000171661377, 3.7090001106262207, 3.7119998931884766, 3.7130000591278076, 3.7109999656677246, 3.7079999446868896, 3.7090001106262207, 3.7090001106262207, 3.7119998931884766, 3.7109999656677246, 3.7109999656677246, 3.7079999446868896, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7060000896453857, 3.7079999446868896, 3.7070000171661377, 3.7060000896453857, 3.7060000896453857, 3.7060000896453857, 3.7070000171661377, 3.7079999446868896, 3.7070000171661377, 3.7090001106262207, 3.7109999656677246, 3.7119998931884766, 3.7109999656677246, 3.7090001106262207, 3.7079999446868896, 3.7079999446868896, 3.7100000381469727, 3.7109999656677246, 3.7119998931884766, 3.7079999446868896, 3.7079999446868896, 3.7060000896453857, 3.7070000171661377, 3.7079999446868896, 3.7090001106262207, 3.7100000381469727, 3.7070000171661377, 3.7060000896453857, 3.7070000171661377, 3.7079999446868896, 3.7079999446868896, 3.7100000381469727, 3.7070000171661377, 3.7070000171661377, 3.7060000896453857, 3.7070000171661377, 3.7090001106262207, 3.7100000381469727, 3.7090001106262207, 3.7060000896453857, 3.7070000171661377, 3.7060000896453857, 3.7070000171661377, 3.7079999446868896, 3.7090001106262207, 3.7070000171661377, 3.7079999446868896, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7090001106262207, 3.7070000171661377, 3.7060000896453857, 3.7070000171661377, 3.7070000171661377, 3.7079999446868896, 3.7070000171661377, 3.7060000896453857, 3.7060000896453857, 3.7070000171661377, 3.7060000896453857, 3.7070000171661377, 3.7060000896453857, 3.7079999446868896, 3.7060000896453857, 3.7060000896453857, 3.7060000896453857, 3.7060000896453857, 3.7079999446868896, 3.7070000171661377, 3.7070000171661377, 3.7079999446868896, 3.7060000896453857, 3.7060000896453857, 3.7109999656677246, 3.7070000171661377, 3.7060000896453857, 3.7060000896453857, 3.7049999237060547, 3.7070000171661377, 3.7100000381469727, 3.7079999446868896, 3.7070000171661377, 3.7070000171661377, 3.7079999446868896, 3.7079999446868896, 3.7149999141693115, 3.7079999446868896, 3.7070000171661377, 3.7049999237060547, 3.7060000896453857, 3.7060000896453857\ - ,3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.63100004196167, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.63100004196167, 3.632999897003174, 3.632999897003174, 3.63100004196167, 3.63100004196167, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.63100004196167, 3.631999969482422, 3.632999897003174, 3.634000062942505, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.63100004196167, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.63100004196167, 3.63100004196167, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.63100004196167, 3.63100004196167, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.631999969482422 - ,3.8959999084472656, 3.8970000743865967, 3.8980000019073486, 3.8980000019073486, 3.8970000743865967, 3.8970000743865967, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8980000019073486, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8980000019073486, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8980000019073486, 3.8949999809265137, 3.8980000019073486, 3.8970000743865967, 3.8970000743865967, 3.8970000743865967, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8980000019073486, 3.8949999809265137, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8980000019073486, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8980000019073486, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8980000019073486, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8980000019073486, 3.8949999809265137, 3.8959999084472656, 3.8980000019073486, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8980000019073486, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8980000019073486, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8989999294281006, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.9010000228881836, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8980000019073486, 3.8970000743865967, 3.8989999294281006, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617\ - ,3.8949999809265137, 3.8970000743865967, 3.8980000019073486, 3.8980000019073486, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8940000534057617, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8940000534057617, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8929998874664307, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.9000000953674316, 3.8940000534057617, 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307\ - ,3.8949999809265137, 3.8970000743865967, 3.8980000019073486, 3.8980000019073486, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8940000534057617, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8940000534057617, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8929998874664307, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.9000000953674316, 3.8940000534057617, 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307\ - ,3.8949999809265137, 3.8970000743865967, 3.8980000019073486, 3.8980000019073486, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8940000534057617, 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, 3.8940000534057617, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8929998874664307, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.9000000953674316, 3.8940000534057617, 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307\ - ,3.8940000534057617, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8929998874664307, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8929998874664307, 3.8959999084472656, 3.8929998874664307, 3.8949999809265137, 3.8929998874664307, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8940000534057617, 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8919999599456787, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8989999294281006, 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, 3.8919999599456787, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8929998874664307, 3.8919999599456787\ - ,3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.632999897003174, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.63100004196167, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.632999897003174, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.63100004196167, 3.63100004196167, 3.63100004196167, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.63100004196167, 3.630000114440918, 3.631999969482422, 3.63100004196167, 3.632999897003174, 3.632999897003174, 3.63100004196167, 3.63100004196167, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.63100004196167, 3.63100004196167, 3.631999969482422, 3.632999897003174, 3.63100004196167, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.63100004196167, 3.63100004196167, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.631999969482422\ - ,3.8940000534057617, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8929998874664307, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8929998874664307, 3.8959999084472656, 3.8929998874664307, 3.8949999809265137, 3.8929998874664307, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8940000534057617, 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8919999599456787, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8989999294281006, 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, 3.8919999599456787, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8929998874664307, 3.8919999599456787\ - ,3.8940000534057617, 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8929998874664307, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8929998874664307, 3.8959999084472656, 3.8929998874664307, 3.8949999809265137, 3.8929998874664307, 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, 3.8940000534057617, 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, 3.8919999599456787, 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, 3.8989999294281006, 3.8929998874664307, 3.8929998874664307, 3.8929998874664307, 3.8919999599456787, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, 3.8940000534057617, 3.8940000534057617, 3.8940000534057617, 3.8929998874664307, 3.8919999599456787\ - ,3.7060000896453857, 3.7070000171661377, 3.7079999446868896, 3.7090001106262207, 3.7070000171661377, 3.7070000171661377, 3.7060000896453857, 3.7060000896453857, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7060000896453857, 3.7079999446868896, 3.7079999446868896, 3.7079999446868896, 3.7070000171661377, 3.7079999446868896, 3.7060000896453857, 3.7060000896453857, 3.7060000896453857, 3.7060000896453857, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7060000896453857, 3.7079999446868896, 3.7060000896453857, 3.7079999446868896, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7060000896453857, 3.7079999446868896, 3.7100000381469727, 3.7109999656677246, 3.7119998931884766, 3.7070000171661377, 3.7060000896453857, 3.7079999446868896, 3.7090001106262207, 3.7100000381469727, 3.7119998931884766, 3.7090001106262207, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7060000896453857, 3.7100000381469727, 3.7079999446868896, 3.7060000896453857, 3.7049999237060547, 3.7070000171661377, 3.7070000171661377, 3.7100000381469727, 3.7119998931884766, 3.7119998931884766, 3.7090001106262207, 3.7079999446868896, 3.7070000171661377, 3.7139999866485596, 3.7109999656677246, 3.7109999656677246, 3.7100000381469727, 3.7070000171661377, 3.7060000896453857, 3.7119998931884766, 3.7109999656677246, 3.7090001106262207, 3.7079999446868896, 3.7070000171661377, 3.7070000171661377, 3.7130000591278076, 3.7100000381469727, 3.7079999446868896, 3.7070000171661377, 3.7060000896453857, 3.7070000171661377, 3.7070000171661377, 3.7090001106262207, 3.7119998931884766, 3.7130000591278076, 3.7109999656677246, 3.7079999446868896, 3.7090001106262207, 3.7090001106262207, 3.7119998931884766, 3.7109999656677246, 3.7109999656677246, 3.7079999446868896, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7060000896453857, 3.7079999446868896, 3.7070000171661377, 3.7060000896453857, 3.7060000896453857, 3.7060000896453857, 3.7070000171661377, 3.7079999446868896, 3.7070000171661377, 3.7090001106262207, 3.7109999656677246, 3.7119998931884766, 3.7109999656677246, 3.7090001106262207, 3.7079999446868896, 3.7079999446868896, 3.7100000381469727, 3.7109999656677246, 3.7119998931884766, 3.7079999446868896, 3.7079999446868896, 3.7060000896453857, 3.7070000171661377, 3.7079999446868896, 3.7090001106262207, 3.7100000381469727, 3.7070000171661377, 3.7060000896453857, 3.7070000171661377, 3.7079999446868896, 3.7079999446868896, 3.7100000381469727, 3.7070000171661377, 3.7070000171661377, 3.7060000896453857, 3.7070000171661377, 3.7090001106262207, 3.7100000381469727, 3.7090001106262207, 3.7060000896453857, 3.7070000171661377, 3.7060000896453857, 3.7070000171661377, 3.7079999446868896, 3.7090001106262207, 3.7070000171661377, 3.7079999446868896, 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, 3.7090001106262207, 3.7070000171661377, 3.7060000896453857, 3.7070000171661377, 3.7070000171661377, 3.7079999446868896, 3.7070000171661377, 3.7060000896453857, 3.7060000896453857, 3.7070000171661377, 3.7060000896453857, 3.7070000171661377, 3.7060000896453857, 3.7079999446868896, 3.7060000896453857, 3.7060000896453857, 3.7060000896453857, 3.7060000896453857, 3.7079999446868896, 3.7070000171661377, 3.7070000171661377, 3.7079999446868896, 3.7060000896453857, 3.7060000896453857, 3.7109999656677246, 3.7070000171661377, 3.7060000896453857, 3.7060000896453857, 3.7049999237060547, 3.7070000171661377, 3.7100000381469727, 3.7079999446868896, 3.7070000171661377, 3.7070000171661377, 3.7079999446868896, 3.7079999446868896, 3.7149999141693115, 3.7079999446868896, 3.7070000171661377, 3.7049999237060547, 3.7060000896453857, 3.7060000896453857\ - ,3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.63100004196167, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.63100004196167, 3.632999897003174, 3.632999897003174, 3.63100004196167, 3.63100004196167, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.63100004196167, 3.631999969482422, 3.632999897003174, 3.634000062942505, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.63100004196167, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.63100004196167, 3.63100004196167, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.63100004196167, 3.63100004196167, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.63100004196167, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.631999969482422, 3.632999897003174, 3.631999969482422, 3.632999897003174, 3.631999969482422 - }; +double g_de1[] = {3.895999908447265612345, 3.897000074386596701234, 3.89800000190734860123456789, + 3.8980000019073486, 3.8970000743865967, 3.8970000743865967, + 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, + 3.8970000743865967, 3.8959999084472656, 3.8980000019073486, + 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, + 3.8980000019073486, 3.8959999084472656, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8970000743865967, + 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, + 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, + 3.8980000019073486, 3.8949999809265137, 3.8980000019073486, + 3.8970000743865967, 3.8970000743865967, 3.8970000743865967, + 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, + 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, + 3.8980000019073486, 3.8949999809265137, 3.8970000743865967, + 3.8970000743865967, 3.8959999084472656, 3.8980000019073486, + 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, + 3.8980000019073486, 3.8970000743865967, 3.8959999084472656, + 3.8970000743865967, 3.8959999084472656, 3.8949999809265137, + 3.8940000534057617, 3.8959999084472656, 3.8970000743865967, + 3.8970000743865967, 3.8970000743865967, 3.8970000743865967, + 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, + 3.8980000019073486, 3.8959999084472656, 3.8949999809265137, + 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, + 3.8980000019073486, 3.8949999809265137, 3.8959999084472656, + 3.8980000019073486, 3.8970000743865967, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, + 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, + 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, + 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, + 3.8980000019073486, 3.8959999084472656, 3.8970000743865967, + 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, + 3.8970000743865967, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, + 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, + 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, + 3.8980000019073486, 3.8959999084472656, 3.8949999809265137, + 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, + 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, + 3.8989999294281006, 3.8959999084472656, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, + 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, + 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8929998874664307, + 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, + 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, + 3.9010000228881836, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, + 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, + 3.8970000743865967, 3.8980000019073486, 3.8970000743865967, + 3.8989999294281006, 3.8959999084472656, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, + 3.8949999809265137, 3.8970000743865967, 3.8980000019073486, + 3.8980000019073486, 3.8959999084472656, 3.8959999084472656, + 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8970000743865967, + 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, + 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, + 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, + 3.8970000743865967, 3.8940000534057617, 3.8970000743865967, + 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, + 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8970000743865967, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, + 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8970000743865967, 3.8940000534057617, 3.8959999084472656, + 3.8970000743865967, 3.8959999084472656, 3.8940000534057617, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, + 3.8940000534057617, 3.8929998874664307, 3.8959999084472656, + 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, + 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, + 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, + 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, + 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8929998874664307, 3.8959999084472656, + 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, + 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, + 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, + 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, + 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, + 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, + 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, + 3.9000000953674316, 3.8940000534057617, 3.8929998874664307, + 3.8929998874664307, 3.8929998874664307, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, + 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, + 3.8949999809265137, 3.8970000743865967, 3.8980000019073486, + 3.8980000019073486, 3.8959999084472656, 3.8959999084472656, + 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8970000743865967, + 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, + 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, + 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, + 3.8970000743865967, 3.8940000534057617, 3.8970000743865967, + 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, + 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8970000743865967, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, + 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8970000743865967, 3.8940000534057617, 3.8959999084472656, + 3.8970000743865967, 3.8959999084472656, 3.8940000534057617, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, + 3.8940000534057617, 3.8929998874664307, 3.8959999084472656, + 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, + 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, + 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, + 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, + 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8929998874664307, 3.8959999084472656, + 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, + 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, + 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, + 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, + 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, + 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, + 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, + 3.9000000953674316, 3.8940000534057617, 3.8929998874664307, + 3.8929998874664307, 3.8929998874664307, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, + 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, + 3.8949999809265137, 3.8970000743865967, 3.8980000019073486, + 3.8980000019073486, 3.8959999084472656, 3.8959999084472656, + 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8970000743865967, + 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, + 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, + 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, + 3.8970000743865967, 3.8940000534057617, 3.8970000743865967, + 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, + 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8970000743865967, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, + 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8970000743865967, 3.8940000534057617, 3.8959999084472656, + 3.8970000743865967, 3.8959999084472656, 3.8940000534057617, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, + 3.8940000534057617, 3.8929998874664307, 3.8959999084472656, + 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, + 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, + 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, + 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, + 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8929998874664307, 3.8959999084472656, + 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, + 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, + 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, + 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, + 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, + 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, + 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, + 3.9000000953674316, 3.8940000534057617, 3.8929998874664307, + 3.8929998874664307, 3.8929998874664307, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, + 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, + 3.8940000534057617, 3.8959999084472656, 3.8970000743865967, + 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, + 3.8959999084472656, 3.8940000534057617, 3.8929998874664307, + 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, + 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, + 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8929998874664307, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, + 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8959999084472656, 3.8929998874664307, 3.8940000534057617, + 3.8959999084472656, 3.8949999809265137, 3.8929998874664307, + 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, + 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, + 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, + 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, + 3.8929998874664307, 3.8929998874664307, 3.8959999084472656, + 3.8929998874664307, 3.8949999809265137, 3.8929998874664307, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, + 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, + 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, + 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, + 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, + 3.8949999809265137, 3.8929998874664307, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, + 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, + 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, + 3.8970000743865967, 3.8940000534057617, 3.8929998874664307, + 3.8929998874664307, 3.8929998874664307, 3.8949999809265137, + 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, + 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, + 3.8940000534057617, 3.8929998874664307, 3.8919999599456787, + 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, + 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, + 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, + 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, + 3.8989999294281006, 3.8929998874664307, 3.8929998874664307, + 3.8929998874664307, 3.8919999599456787, 3.8940000534057617, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8970000743865967, 3.8940000534057617, 3.8940000534057617, + 3.8940000534057617, 3.8929998874664307, 3.8919999599456787, + 3.631999969482422, 3.631999969482422, 3.63100004196167, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.632999897003174, 3.631999969482422, + 3.632999897003174, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.632999897003174, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.63100004196167, 3.631999969482422, + 3.632999897003174, 3.63100004196167, 3.631999969482422, + 3.631999969482422, 3.63100004196167, 3.631999969482422, + 3.63100004196167, 3.63100004196167, 3.631999969482422, + 3.631999969482422, 3.63100004196167, 3.631999969482422, + 3.632999897003174, 3.63100004196167, 3.631999969482422, + 3.631999969482422, 3.63100004196167, 3.631999969482422, + 3.631999969482422, 3.63100004196167, 3.631999969482422, + 3.63100004196167, 3.63100004196167, 3.63100004196167, + 3.632999897003174, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.632999897003174, 3.632999897003174, 3.63100004196167, + 3.630000114440918, 3.631999969482422, 3.63100004196167, + 3.632999897003174, 3.632999897003174, 3.63100004196167, + 3.63100004196167, 3.632999897003174, 3.632999897003174, + 3.632999897003174, 3.631999969482422, 3.63100004196167, + 3.631999969482422, 3.631999969482422, 3.63100004196167, + 3.632999897003174, 3.632999897003174, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.632999897003174, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.63100004196167, 3.631999969482422, + 3.631999969482422, 3.63100004196167, 3.63100004196167, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.632999897003174, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.632999897003174, + 3.632999897003174, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.63100004196167, 3.63100004196167, + 3.631999969482422, 3.631999969482422, 3.63100004196167, + 3.632999897003174, 3.631999969482422, 3.631999969482422, + 3.632999897003174, 3.631999969482422, 3.632999897003174, + 3.631999969482422, 3.632999897003174, 3.632999897003174, + 3.632999897003174, 3.63100004196167, 3.63100004196167, + 3.631999969482422, 3.632999897003174, 3.63100004196167, + 3.631999969482422, 3.632999897003174, 3.632999897003174, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.63100004196167, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.632999897003174, + 3.632999897003174, 3.632999897003174, 3.631999969482422, + 3.63100004196167, 3.63100004196167, 3.631999969482422, + 3.632999897003174, 3.631999969482422, 3.632999897003174, + 3.632999897003174, 3.631999969482422, 3.63100004196167, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.63100004196167, 3.631999969482422, 3.631999969482422, + 3.63100004196167, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.63100004196167, 3.631999969482422, + 3.631999969482422, 3.63100004196167, 3.63100004196167, + 3.631999969482422, 3.631999969482422, 3.632999897003174, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.632999897003174, + 3.631999969482422, 3.631999969482422, 3.632999897003174, + 3.631999969482422, 3.631999969482422, 3.632999897003174, + 3.631999969482422, 3.632999897003174, 3.631999969482422, + 3.8940000534057617, 3.8959999084472656, 3.8970000743865967, + 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, + 3.8959999084472656, 3.8940000534057617, 3.8929998874664307, + 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, + 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, + 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8929998874664307, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, + 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8959999084472656, 3.8929998874664307, 3.8940000534057617, + 3.8959999084472656, 3.8949999809265137, 3.8929998874664307, + 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, + 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, + 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, + 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, + 3.8929998874664307, 3.8929998874664307, 3.8959999084472656, + 3.8929998874664307, 3.8949999809265137, 3.8929998874664307, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, + 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, + 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, + 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, + 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, + 3.8949999809265137, 3.8929998874664307, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, + 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, + 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, + 3.8970000743865967, 3.8940000534057617, 3.8929998874664307, + 3.8929998874664307, 3.8929998874664307, 3.8949999809265137, + 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, + 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, + 3.8940000534057617, 3.8929998874664307, 3.8919999599456787, + 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, + 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, + 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, + 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, + 3.8989999294281006, 3.8929998874664307, 3.8929998874664307, + 3.8929998874664307, 3.8919999599456787, 3.8940000534057617, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8970000743865967, 3.8940000534057617, 3.8940000534057617, + 3.8940000534057617, 3.8929998874664307, 3.8919999599456787, + 3.8940000534057617, 3.8959999084472656, 3.8970000743865967, + 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, + 3.8959999084472656, 3.8940000534057617, 3.8929998874664307, + 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, + 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, + 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8929998874664307, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, + 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8959999084472656, 3.8929998874664307, 3.8940000534057617, + 3.8959999084472656, 3.8949999809265137, 3.8929998874664307, + 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, + 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, + 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, + 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, + 3.8929998874664307, 3.8929998874664307, 3.8959999084472656, + 3.8929998874664307, 3.8949999809265137, 3.8929998874664307, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, + 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, + 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, + 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, + 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, + 3.8949999809265137, 3.8929998874664307, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, + 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, + 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, + 3.8970000743865967, 3.8940000534057617, 3.8929998874664307, + 3.8929998874664307, 3.8929998874664307, 3.8949999809265137, + 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, + 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, + 3.8940000534057617, 3.8929998874664307, 3.8919999599456787, + 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, + 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, + 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, + 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, + 3.8989999294281006, 3.8929998874664307, 3.8929998874664307, + 3.8929998874664307, 3.8919999599456787, 3.8940000534057617, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8970000743865967, 3.8940000534057617, 3.8940000534057617, + 3.8940000534057617, 3.8929998874664307, 3.8919999599456787, + 3.7060000896453857, 3.7070000171661377, 3.7079999446868896, + 3.7090001106262207, 3.7070000171661377, 3.7070000171661377, + 3.7060000896453857, 3.7060000896453857, 3.7070000171661377, + 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, + 3.7070000171661377, 3.7060000896453857, 3.7079999446868896, + 3.7079999446868896, 3.7079999446868896, 3.7070000171661377, + 3.7079999446868896, 3.7060000896453857, 3.7060000896453857, + 3.7060000896453857, 3.7060000896453857, 3.7070000171661377, + 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, + 3.7070000171661377, 3.7070000171661377, 3.7060000896453857, + 3.7079999446868896, 3.7060000896453857, 3.7079999446868896, + 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, + 3.7070000171661377, 3.7060000896453857, 3.7079999446868896, + 3.7100000381469727, 3.7109999656677246, 3.7119998931884766, + 3.7070000171661377, 3.7060000896453857, 3.7079999446868896, + 3.7090001106262207, 3.7100000381469727, 3.7119998931884766, + 3.7090001106262207, 3.7070000171661377, 3.7070000171661377, + 3.7070000171661377, 3.7070000171661377, 3.7060000896453857, + 3.7100000381469727, 3.7079999446868896, 3.7060000896453857, + 3.7049999237060547, 3.7070000171661377, 3.7070000171661377, + 3.7100000381469727, 3.7119998931884766, 3.7119998931884766, + 3.7090001106262207, 3.7079999446868896, 3.7070000171661377, + 3.7139999866485596, 3.7109999656677246, 3.7109999656677246, + 3.7100000381469727, 3.7070000171661377, 3.7060000896453857, + 3.7119998931884766, 3.7109999656677246, 3.7090001106262207, + 3.7079999446868896, 3.7070000171661377, 3.7070000171661377, + 3.7130000591278076, 3.7100000381469727, 3.7079999446868896, + 3.7070000171661377, 3.7060000896453857, 3.7070000171661377, + 3.7070000171661377, 3.7090001106262207, 3.7119998931884766, + 3.7130000591278076, 3.7109999656677246, 3.7079999446868896, + 3.7090001106262207, 3.7090001106262207, 3.7119998931884766, + 3.7109999656677246, 3.7109999656677246, 3.7079999446868896, + 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, + 3.7070000171661377, 3.7060000896453857, 3.7079999446868896, + 3.7070000171661377, 3.7060000896453857, 3.7060000896453857, + 3.7060000896453857, 3.7070000171661377, 3.7079999446868896, + 3.7070000171661377, 3.7090001106262207, 3.7109999656677246, + 3.7119998931884766, 3.7109999656677246, 3.7090001106262207, + 3.7079999446868896, 3.7079999446868896, 3.7100000381469727, + 3.7109999656677246, 3.7119998931884766, 3.7079999446868896, + 3.7079999446868896, 3.7060000896453857, 3.7070000171661377, + 3.7079999446868896, 3.7090001106262207, 3.7100000381469727, + 3.7070000171661377, 3.7060000896453857, 3.7070000171661377, + 3.7079999446868896, 3.7079999446868896, 3.7100000381469727, + 3.7070000171661377, 3.7070000171661377, 3.7060000896453857, + 3.7070000171661377, 3.7090001106262207, 3.7100000381469727, + 3.7090001106262207, 3.7060000896453857, 3.7070000171661377, + 3.7060000896453857, 3.7070000171661377, 3.7079999446868896, + 3.7090001106262207, 3.7070000171661377, 3.7079999446868896, + 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, + 3.7090001106262207, 3.7070000171661377, 3.7060000896453857, + 3.7070000171661377, 3.7070000171661377, 3.7079999446868896, + 3.7070000171661377, 3.7060000896453857, 3.7060000896453857, + 3.7070000171661377, 3.7060000896453857, 3.7070000171661377, + 3.7060000896453857, 3.7079999446868896, 3.7060000896453857, + 3.7060000896453857, 3.7060000896453857, 3.7060000896453857, + 3.7079999446868896, 3.7070000171661377, 3.7070000171661377, + 3.7079999446868896, 3.7060000896453857, 3.7060000896453857, + 3.7109999656677246, 3.7070000171661377, 3.7060000896453857, + 3.7060000896453857, 3.7049999237060547, 3.7070000171661377, + 3.7100000381469727, 3.7079999446868896, 3.7070000171661377, + 3.7070000171661377, 3.7079999446868896, 3.7079999446868896, + 3.7149999141693115, 3.7079999446868896, 3.7070000171661377, + 3.7049999237060547, 3.7060000896453857, 3.7060000896453857, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.632999897003174, 3.632999897003174, + 3.632999897003174, 3.631999969482422, 3.632999897003174, + 3.632999897003174, 3.632999897003174, 3.632999897003174, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.632999897003174, 3.631999969482422, 3.631999969482422, + 3.632999897003174, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.63100004196167, 3.631999969482422, + 3.631999969482422, 3.63100004196167, 3.631999969482422, + 3.632999897003174, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.63100004196167, 3.631999969482422, + 3.631999969482422, 3.63100004196167, 3.631999969482422, + 3.631999969482422, 3.63100004196167, 3.63100004196167, + 3.632999897003174, 3.632999897003174, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.632999897003174, 3.632999897003174, 3.631999969482422, + 3.63100004196167, 3.631999969482422, 3.63100004196167, + 3.632999897003174, 3.632999897003174, 3.63100004196167, + 3.63100004196167, 3.632999897003174, 3.632999897003174, + 3.632999897003174, 3.631999969482422, 3.63100004196167, + 3.631999969482422, 3.631999969482422, 3.63100004196167, + 3.632999897003174, 3.632999897003174, 3.631999969482422, + 3.632999897003174, 3.632999897003174, 3.632999897003174, + 3.63100004196167, 3.631999969482422, 3.632999897003174, + 3.634000062942505, 3.632999897003174, 3.632999897003174, + 3.631999969482422, 3.631999969482422, 3.632999897003174, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.632999897003174, 3.631999969482422, 3.632999897003174, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.632999897003174, 3.632999897003174, 3.632999897003174, + 3.632999897003174, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.632999897003174, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.632999897003174, + 3.632999897003174, 3.63100004196167, 3.63100004196167, + 3.631999969482422, 3.631999969482422, 3.63100004196167, + 3.632999897003174, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.632999897003174, + 3.631999969482422, 3.632999897003174, 3.632999897003174, + 3.632999897003174, 3.63100004196167, 3.63100004196167, + 3.632999897003174, 3.632999897003174, 3.631999969482422, + 3.631999969482422, 3.632999897003174, 3.632999897003174, + 3.632999897003174, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.632999897003174, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.632999897003174, + 3.632999897003174, 3.632999897003174, 3.631999969482422, + 3.63100004196167, 3.63100004196167, 3.631999969482422, + 3.632999897003174, 3.631999969482422, 3.632999897003174, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.63100004196167, 3.631999969482422, 3.631999969482422, + 3.63100004196167, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.63100004196167, 3.631999969482422, + 3.631999969482422, 3.63100004196167, 3.631999969482422, + 3.631999969482422, 3.632999897003174, 3.632999897003174, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.632999897003174, + 3.631999969482422, 3.631999969482422, 3.632999897003174, + 3.631999969482422, 3.632999897003174, 3.631999969482422, + 3.8959999084472656, 3.8970000743865967, 3.8980000019073486, + 3.8980000019073486, 3.8970000743865967, 3.8970000743865967, + 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, + 3.8970000743865967, 3.8959999084472656, 3.8980000019073486, + 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, + 3.8980000019073486, 3.8959999084472656, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8970000743865967, + 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, + 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, + 3.8980000019073486, 3.8949999809265137, 3.8980000019073486, + 3.8970000743865967, 3.8970000743865967, 3.8970000743865967, + 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, + 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, + 3.8980000019073486, 3.8949999809265137, 3.8970000743865967, + 3.8970000743865967, 3.8959999084472656, 3.8980000019073486, + 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, + 3.8980000019073486, 3.8970000743865967, 3.8959999084472656, + 3.8970000743865967, 3.8959999084472656, 3.8949999809265137, + 3.8940000534057617, 3.8959999084472656, 3.8970000743865967, + 3.8970000743865967, 3.8970000743865967, 3.8970000743865967, + 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, + 3.8980000019073486, 3.8959999084472656, 3.8949999809265137, + 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, + 3.8980000019073486, 3.8949999809265137, 3.8959999084472656, + 3.8980000019073486, 3.8970000743865967, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, + 3.8959999084472656, 3.8970000743865967, 3.8970000743865967, + 3.8949999809265137, 3.8940000534057617, 3.8970000743865967, + 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, + 3.8980000019073486, 3.8959999084472656, 3.8970000743865967, + 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, + 3.8970000743865967, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, + 3.8949999809265137, 3.8959999084472656, 3.8970000743865967, + 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, + 3.8980000019073486, 3.8959999084472656, 3.8949999809265137, + 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8970000743865967, 3.8959999084472656, + 3.8970000743865967, 3.8970000743865967, 3.8959999084472656, + 3.8989999294281006, 3.8959999084472656, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, + 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, + 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8940000534057617, 3.8959999084472656, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8929998874664307, + 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, + 3.8970000743865967, 3.8949999809265137, 3.8959999084472656, + 3.9010000228881836, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, + 3.8959999084472656, 3.8959999084472656, 3.8970000743865967, + 3.8970000743865967, 3.8980000019073486, 3.8970000743865967, + 3.8989999294281006, 3.8959999084472656, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, + 3.8949999809265137, 3.8970000743865967, 3.8980000019073486, + 3.8980000019073486, 3.8959999084472656, 3.8959999084472656, + 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8970000743865967, + 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, + 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, + 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, + 3.8970000743865967, 3.8940000534057617, 3.8970000743865967, + 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, + 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8970000743865967, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, + 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8970000743865967, 3.8940000534057617, 3.8959999084472656, + 3.8970000743865967, 3.8959999084472656, 3.8940000534057617, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, + 3.8940000534057617, 3.8929998874664307, 3.8959999084472656, + 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, + 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, + 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, + 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, + 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8929998874664307, 3.8959999084472656, + 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, + 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, + 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, + 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, + 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, + 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, + 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, + 3.9000000953674316, 3.8940000534057617, 3.8929998874664307, + 3.8929998874664307, 3.8929998874664307, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, + 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, + 3.8949999809265137, 3.8970000743865967, 3.8980000019073486, + 3.8980000019073486, 3.8959999084472656, 3.8959999084472656, + 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8970000743865967, + 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, + 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, + 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, + 3.8970000743865967, 3.8940000534057617, 3.8970000743865967, + 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, + 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8970000743865967, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, + 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8970000743865967, 3.8940000534057617, 3.8959999084472656, + 3.8970000743865967, 3.8959999084472656, 3.8940000534057617, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, + 3.8940000534057617, 3.8929998874664307, 3.8959999084472656, + 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, + 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, + 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, + 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, + 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8929998874664307, 3.8959999084472656, + 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, + 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, + 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, + 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, + 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, + 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, + 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, + 3.9000000953674316, 3.8940000534057617, 3.8929998874664307, + 3.8929998874664307, 3.8929998874664307, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, + 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, + 3.8949999809265137, 3.8970000743865967, 3.8980000019073486, + 3.8980000019073486, 3.8959999084472656, 3.8959999084472656, + 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8970000743865967, + 3.8970000743865967, 3.8959999084472656, 3.8959999084472656, + 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, + 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, + 3.8970000743865967, 3.8940000534057617, 3.8970000743865967, + 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, + 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8970000743865967, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, + 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8970000743865967, 3.8940000534057617, 3.8959999084472656, + 3.8970000743865967, 3.8959999084472656, 3.8940000534057617, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8959999084472656, 3.8959999084472656, + 3.8940000534057617, 3.8929998874664307, 3.8959999084472656, + 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, + 3.8970000743865967, 3.8959999084472656, 3.8970000743865967, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8970000743865967, + 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, + 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, + 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8929998874664307, 3.8959999084472656, + 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8959999084472656, 3.8949999809265137, + 3.8959999084472656, 3.8959999084472656, 3.8949999809265137, + 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, + 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, + 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, + 3.8959999084472656, 3.8959999084472656, 3.8940000534057617, + 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, + 3.9000000953674316, 3.8940000534057617, 3.8929998874664307, + 3.8929998874664307, 3.8929998874664307, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8959999084472656, 3.8959999084472656, + 3.8980000019073486, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8929998874664307, + 3.8940000534057617, 3.8959999084472656, 3.8970000743865967, + 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, + 3.8959999084472656, 3.8940000534057617, 3.8929998874664307, + 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, + 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, + 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8929998874664307, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, + 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8959999084472656, 3.8929998874664307, 3.8940000534057617, + 3.8959999084472656, 3.8949999809265137, 3.8929998874664307, + 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, + 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, + 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, + 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, + 3.8929998874664307, 3.8929998874664307, 3.8959999084472656, + 3.8929998874664307, 3.8949999809265137, 3.8929998874664307, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, + 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, + 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, + 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, + 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, + 3.8949999809265137, 3.8929998874664307, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, + 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, + 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, + 3.8970000743865967, 3.8940000534057617, 3.8929998874664307, + 3.8929998874664307, 3.8929998874664307, 3.8949999809265137, + 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, + 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, + 3.8940000534057617, 3.8929998874664307, 3.8919999599456787, + 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, + 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, + 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, + 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, + 3.8989999294281006, 3.8929998874664307, 3.8929998874664307, + 3.8929998874664307, 3.8919999599456787, 3.8940000534057617, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8970000743865967, 3.8940000534057617, 3.8940000534057617, + 3.8940000534057617, 3.8929998874664307, 3.8919999599456787, + 3.631999969482422, 3.631999969482422, 3.63100004196167, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.632999897003174, 3.631999969482422, + 3.632999897003174, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.632999897003174, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.63100004196167, 3.631999969482422, + 3.632999897003174, 3.63100004196167, 3.631999969482422, + 3.631999969482422, 3.63100004196167, 3.631999969482422, + 3.63100004196167, 3.63100004196167, 3.631999969482422, + 3.631999969482422, 3.63100004196167, 3.631999969482422, + 3.632999897003174, 3.63100004196167, 3.631999969482422, + 3.631999969482422, 3.63100004196167, 3.631999969482422, + 3.631999969482422, 3.63100004196167, 3.631999969482422, + 3.63100004196167, 3.63100004196167, 3.63100004196167, + 3.632999897003174, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.632999897003174, 3.632999897003174, 3.63100004196167, + 3.630000114440918, 3.631999969482422, 3.63100004196167, + 3.632999897003174, 3.632999897003174, 3.63100004196167, + 3.63100004196167, 3.632999897003174, 3.632999897003174, + 3.632999897003174, 3.631999969482422, 3.63100004196167, + 3.631999969482422, 3.631999969482422, 3.63100004196167, + 3.632999897003174, 3.632999897003174, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.632999897003174, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.63100004196167, 3.631999969482422, + 3.631999969482422, 3.63100004196167, 3.63100004196167, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.632999897003174, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.632999897003174, + 3.632999897003174, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.63100004196167, 3.63100004196167, + 3.631999969482422, 3.631999969482422, 3.63100004196167, + 3.632999897003174, 3.631999969482422, 3.631999969482422, + 3.632999897003174, 3.631999969482422, 3.632999897003174, + 3.631999969482422, 3.632999897003174, 3.632999897003174, + 3.632999897003174, 3.63100004196167, 3.63100004196167, + 3.631999969482422, 3.632999897003174, 3.63100004196167, + 3.631999969482422, 3.632999897003174, 3.632999897003174, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.63100004196167, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.632999897003174, + 3.632999897003174, 3.632999897003174, 3.631999969482422, + 3.63100004196167, 3.63100004196167, 3.631999969482422, + 3.632999897003174, 3.631999969482422, 3.632999897003174, + 3.632999897003174, 3.631999969482422, 3.63100004196167, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.63100004196167, 3.631999969482422, 3.631999969482422, + 3.63100004196167, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.63100004196167, 3.631999969482422, + 3.631999969482422, 3.63100004196167, 3.63100004196167, + 3.631999969482422, 3.631999969482422, 3.632999897003174, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.632999897003174, + 3.631999969482422, 3.631999969482422, 3.632999897003174, + 3.631999969482422, 3.631999969482422, 3.632999897003174, + 3.631999969482422, 3.632999897003174, 3.631999969482422, + 3.8940000534057617, 3.8959999084472656, 3.8970000743865967, + 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, + 3.8959999084472656, 3.8940000534057617, 3.8929998874664307, + 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, + 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, + 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8929998874664307, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, + 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8959999084472656, 3.8929998874664307, 3.8940000534057617, + 3.8959999084472656, 3.8949999809265137, 3.8929998874664307, + 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, + 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, + 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, + 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, + 3.8929998874664307, 3.8929998874664307, 3.8959999084472656, + 3.8929998874664307, 3.8949999809265137, 3.8929998874664307, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, + 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, + 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, + 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, + 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, + 3.8949999809265137, 3.8929998874664307, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, + 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, + 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, + 3.8970000743865967, 3.8940000534057617, 3.8929998874664307, + 3.8929998874664307, 3.8929998874664307, 3.8949999809265137, + 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, + 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, + 3.8940000534057617, 3.8929998874664307, 3.8919999599456787, + 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, + 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, + 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, + 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, + 3.8989999294281006, 3.8929998874664307, 3.8929998874664307, + 3.8929998874664307, 3.8919999599456787, 3.8940000534057617, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8970000743865967, 3.8940000534057617, 3.8940000534057617, + 3.8940000534057617, 3.8929998874664307, 3.8919999599456787, + 3.8940000534057617, 3.8959999084472656, 3.8970000743865967, + 3.8970000743865967, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, + 3.8959999084472656, 3.8940000534057617, 3.8929998874664307, + 3.8940000534057617, 3.8929998874664307, 3.8949999809265137, + 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, + 3.8959999084472656, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8929998874664307, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8959999084472656, + 3.8959999084472656, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8949999809265137, 3.8940000534057617, + 3.8929998874664307, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8959999084472656, 3.8929998874664307, 3.8940000534057617, + 3.8959999084472656, 3.8949999809265137, 3.8929998874664307, + 3.8940000534057617, 3.8929998874664307, 3.8940000534057617, + 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, + 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, + 3.8940000534057617, 3.8949999809265137, 3.8949999809265137, + 3.8929998874664307, 3.8929998874664307, 3.8959999084472656, + 3.8929998874664307, 3.8949999809265137, 3.8929998874664307, + 3.8959999084472656, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8940000534057617, 3.8949999809265137, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, + 3.8970000743865967, 3.8949999809265137, 3.8940000534057617, + 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, + 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, + 3.8959999084472656, 3.8940000534057617, 3.8940000534057617, + 3.8949999809265137, 3.8929998874664307, 3.8949999809265137, + 3.8949999809265137, 3.8940000534057617, 3.8940000534057617, + 3.8940000534057617, 3.8949999809265137, 3.8940000534057617, + 3.8949999809265137, 3.8949999809265137, 3.8940000534057617, + 3.8970000743865967, 3.8940000534057617, 3.8929998874664307, + 3.8929998874664307, 3.8929998874664307, 3.8949999809265137, + 3.8940000534057617, 3.8940000534057617, 3.8959999084472656, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8959999084472656, 3.8940000534057617, 3.8949999809265137, + 3.8929998874664307, 3.8940000534057617, 3.8949999809265137, + 3.8940000534057617, 3.8929998874664307, 3.8919999599456787, + 3.8929998874664307, 3.8940000534057617, 3.8929998874664307, + 3.8940000534057617, 3.8949999809265137, 3.8929998874664307, + 3.8929998874664307, 3.8940000534057617, 3.8940000534057617, + 3.8949999809265137, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8929998874664307, 3.8940000534057617, + 3.8989999294281006, 3.8929998874664307, 3.8929998874664307, + 3.8929998874664307, 3.8919999599456787, 3.8940000534057617, + 3.8940000534057617, 3.8940000534057617, 3.8949999809265137, + 3.8949999809265137, 3.8949999809265137, 3.8949999809265137, + 3.8970000743865967, 3.8940000534057617, 3.8940000534057617, + 3.8940000534057617, 3.8929998874664307, 3.8919999599456787, + 3.7060000896453857, 3.7070000171661377, 3.7079999446868896, + 3.7090001106262207, 3.7070000171661377, 3.7070000171661377, + 3.7060000896453857, 3.7060000896453857, 3.7070000171661377, + 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, + 3.7070000171661377, 3.7060000896453857, 3.7079999446868896, + 3.7079999446868896, 3.7079999446868896, 3.7070000171661377, + 3.7079999446868896, 3.7060000896453857, 3.7060000896453857, + 3.7060000896453857, 3.7060000896453857, 3.7070000171661377, + 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, + 3.7070000171661377, 3.7070000171661377, 3.7060000896453857, + 3.7079999446868896, 3.7060000896453857, 3.7079999446868896, + 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, + 3.7070000171661377, 3.7060000896453857, 3.7079999446868896, + 3.7100000381469727, 3.7109999656677246, 3.7119998931884766, + 3.7070000171661377, 3.7060000896453857, 3.7079999446868896, + 3.7090001106262207, 3.7100000381469727, 3.7119998931884766, + 3.7090001106262207, 3.7070000171661377, 3.7070000171661377, + 3.7070000171661377, 3.7070000171661377, 3.7060000896453857, + 3.7100000381469727, 3.7079999446868896, 3.7060000896453857, + 3.7049999237060547, 3.7070000171661377, 3.7070000171661377, + 3.7100000381469727, 3.7119998931884766, 3.7119998931884766, + 3.7090001106262207, 3.7079999446868896, 3.7070000171661377, + 3.7139999866485596, 3.7109999656677246, 3.7109999656677246, + 3.7100000381469727, 3.7070000171661377, 3.7060000896453857, + 3.7119998931884766, 3.7109999656677246, 3.7090001106262207, + 3.7079999446868896, 3.7070000171661377, 3.7070000171661377, + 3.7130000591278076, 3.7100000381469727, 3.7079999446868896, + 3.7070000171661377, 3.7060000896453857, 3.7070000171661377, + 3.7070000171661377, 3.7090001106262207, 3.7119998931884766, + 3.7130000591278076, 3.7109999656677246, 3.7079999446868896, + 3.7090001106262207, 3.7090001106262207, 3.7119998931884766, + 3.7109999656677246, 3.7109999656677246, 3.7079999446868896, + 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, + 3.7070000171661377, 3.7060000896453857, 3.7079999446868896, + 3.7070000171661377, 3.7060000896453857, 3.7060000896453857, + 3.7060000896453857, 3.7070000171661377, 3.7079999446868896, + 3.7070000171661377, 3.7090001106262207, 3.7109999656677246, + 3.7119998931884766, 3.7109999656677246, 3.7090001106262207, + 3.7079999446868896, 3.7079999446868896, 3.7100000381469727, + 3.7109999656677246, 3.7119998931884766, 3.7079999446868896, + 3.7079999446868896, 3.7060000896453857, 3.7070000171661377, + 3.7079999446868896, 3.7090001106262207, 3.7100000381469727, + 3.7070000171661377, 3.7060000896453857, 3.7070000171661377, + 3.7079999446868896, 3.7079999446868896, 3.7100000381469727, + 3.7070000171661377, 3.7070000171661377, 3.7060000896453857, + 3.7070000171661377, 3.7090001106262207, 3.7100000381469727, + 3.7090001106262207, 3.7060000896453857, 3.7070000171661377, + 3.7060000896453857, 3.7070000171661377, 3.7079999446868896, + 3.7090001106262207, 3.7070000171661377, 3.7079999446868896, + 3.7070000171661377, 3.7070000171661377, 3.7070000171661377, + 3.7090001106262207, 3.7070000171661377, 3.7060000896453857, + 3.7070000171661377, 3.7070000171661377, 3.7079999446868896, + 3.7070000171661377, 3.7060000896453857, 3.7060000896453857, + 3.7070000171661377, 3.7060000896453857, 3.7070000171661377, + 3.7060000896453857, 3.7079999446868896, 3.7060000896453857, + 3.7060000896453857, 3.7060000896453857, 3.7060000896453857, + 3.7079999446868896, 3.7070000171661377, 3.7070000171661377, + 3.7079999446868896, 3.7060000896453857, 3.7060000896453857, + 3.7109999656677246, 3.7070000171661377, 3.7060000896453857, + 3.7060000896453857, 3.7049999237060547, 3.7070000171661377, + 3.7100000381469727, 3.7079999446868896, 3.7070000171661377, + 3.7070000171661377, 3.7079999446868896, 3.7079999446868896, + 3.7149999141693115, 3.7079999446868896, 3.7070000171661377, + 3.7049999237060547, 3.7060000896453857, 3.7060000896453857, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.632999897003174, 3.632999897003174, + 3.632999897003174, 3.631999969482422, 3.632999897003174, + 3.632999897003174, 3.632999897003174, 3.632999897003174, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.632999897003174, 3.631999969482422, 3.631999969482422, + 3.632999897003174, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.63100004196167, 3.631999969482422, + 3.631999969482422, 3.63100004196167, 3.631999969482422, + 3.632999897003174, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.63100004196167, 3.631999969482422, + 3.631999969482422, 3.63100004196167, 3.631999969482422, + 3.631999969482422, 3.63100004196167, 3.63100004196167, + 3.632999897003174, 3.632999897003174, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.632999897003174, 3.632999897003174, 3.631999969482422, + 3.63100004196167, 3.631999969482422, 3.63100004196167, + 3.632999897003174, 3.632999897003174, 3.63100004196167, + 3.63100004196167, 3.632999897003174, 3.632999897003174, + 3.632999897003174, 3.631999969482422, 3.63100004196167, + 3.631999969482422, 3.631999969482422, 3.63100004196167, + 3.632999897003174, 3.632999897003174, 3.631999969482422, + 3.632999897003174, 3.632999897003174, 3.632999897003174, + 3.63100004196167, 3.631999969482422, 3.632999897003174, + 3.634000062942505, 3.632999897003174, 3.632999897003174, + 3.631999969482422, 3.631999969482422, 3.632999897003174, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.632999897003174, 3.631999969482422, 3.632999897003174, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.632999897003174, 3.632999897003174, 3.632999897003174, + 3.632999897003174, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.632999897003174, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.632999897003174, + 3.632999897003174, 3.63100004196167, 3.63100004196167, + 3.631999969482422, 3.631999969482422, 3.63100004196167, + 3.632999897003174, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.632999897003174, + 3.631999969482422, 3.632999897003174, 3.632999897003174, + 3.632999897003174, 3.63100004196167, 3.63100004196167, + 3.632999897003174, 3.632999897003174, 3.631999969482422, + 3.631999969482422, 3.632999897003174, 3.632999897003174, + 3.632999897003174, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.632999897003174, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.632999897003174, + 3.632999897003174, 3.632999897003174, 3.631999969482422, + 3.63100004196167, 3.63100004196167, 3.631999969482422, + 3.632999897003174, 3.631999969482422, 3.632999897003174, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.63100004196167, 3.631999969482422, 3.631999969482422, + 3.63100004196167, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.63100004196167, 3.631999969482422, + 3.631999969482422, 3.63100004196167, 3.631999969482422, + 3.631999969482422, 3.632999897003174, 3.632999897003174, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.631999969482422, + 3.631999969482422, 3.631999969482422, 3.632999897003174, + 3.631999969482422, 3.631999969482422, 3.632999897003174, + 3.631999969482422, 3.632999897003174, 3.631999969482422}; /* struct timeval startTime; -struct timeval endTime; -struct timeval costStart; +struct timeval endTime; +struct timeval costStart; double totalCost = 0; void cost_start() { - totalCost = 0; + totalCost = 0; gettimeofday(&costStart, NULL); } @@ -111,93 +2110,84 @@ double cost_end(const char* tag) totalCost += elapsed; double use_ms = totalCost*1000; printf(" timecost %s : %.3f ms\n", tag, use_ms); - return use_ms; + return use_ms; } */ -float toFloat(char* buf){ - return (float)atoll(buf); -} +float toFloat(char* buf) { return (float)atoll(buf); } // -// read float +// read float // -float* read_float(const char* inFile, int* pcount){ +float* read_float(const char* inFile, int* pcount) { // check valid - if(inFile == NULL || inFile[0] == 0 ){ + if (inFile == NULL || inFile[0] == 0) { printf(" inFile is NULL or EMPTY.\n"); return NULL; } // read in file - TdFilePtr pfin = taosOpenFile(inFile, TD_FILE_READ); - if(pfin == NULL){ + TdFilePtr pfin = taosOpenFile(inFile, TD_FILE_READ); + if (pfin == NULL) { printf(" open IN file %s error. errno=%d\n", inFile, errno); return false; } // read one line from infile and write to outfile - char buf[256]={0}; - int malloc_cnt = 100000; - float* floats = taosMemoryMalloc(malloc_cnt*sizeof(float)); - int fi = 0; - while(taosGetsFile(pfin, sizeof(buf), buf) > 0) { + char buf[256] = {0}; + int malloc_cnt = 100000; + float* floats = taosMemoryMalloc(malloc_cnt * sizeof(float)); + int fi = 0; + while (taosGetsFile(pfin, sizeof(buf), buf) > 0) { // get item - if(buf[0] == 0 || strcmp(buf, " ") == 0) - continue; + if (buf[0] == 0 || strcmp(buf, " ") == 0) continue; floats[fi] = atof(buf); - //printf(" buff=%s float=%.50f \n ", buf, floats[fi]); - if ( ++fi == malloc_cnt ) { + // printf(" buff=%s float=%.50f \n ", buf, floats[fi]); + if (++fi == malloc_cnt) { malloc_cnt += 100000; - float* floats1 = taosMemoryRealloc(floats, malloc_cnt*sizeof(float)); - if(floats1 == NULL) - break; - floats = floats1; + float* floats1 = taosMemoryRealloc(floats, malloc_cnt * sizeof(float)); + if (floats1 == NULL) break; + floats = floats1; } memset(buf, 0, sizeof(buf)); } // close taosCloseFile(&pfin); - if(pcount) - *pcount = fi; + if (pcount) *pcount = fi; return floats; } -float check_same(float* ft1, float* ft2, int count){ - int same_cnt =0; - for(int i=0; i< count; i++){ - - if(ft1[i] == ft2[i]){ - same_cnt ++; +float check_same(float* ft1, float* ft2, int count) { + int same_cnt = 0; + for (int i = 0; i < count; i++) { + if (ft1[i] == ft2[i]) { + same_cnt++; } - if(i < 5){ + if (i < 5) { printf(" i=%d ft1=%.40f diff=%.40f \n", i, ft1[i], ft1[i] - ft2[i]); printf(" i=%d ft2=%.40f \n", i, ft2[i]); } - } - float same_rate = same_cnt*100/count; + float same_rate = same_cnt * 100 / count; printf(" all count=%d same=%d same rate=%.0f%% \n", count, same_cnt, same_rate); return same_rate; } -double check_same_double(double* ft1, double* ft2, int count){ - int same_cnt =0; - for(int i=0; i< count; i++){ - - if(ft1[i] == ft2[i]){ - same_cnt ++; +double check_same_double(double* ft1, double* ft2, int count) { + int same_cnt = 0; + for (int i = 0; i < count; i++) { + if (ft1[i] == ft2[i]) { + same_cnt++; } - if(i < 5){ + if (i < 5) { printf(" i=%d ft1=%.40f diff=%.40f \n", i, ft1[i], ft1[i] - ft2[i]); printf(" i=%d ft2=%.40f \n", i, ft2[i]); } - } - double same_rate = same_cnt*100/count; + double same_rate = same_cnt * 100 / count; printf(" all count=%d same=%d same rate=%.0f%% \n", count, same_cnt, same_rate); return same_rate; } @@ -209,41 +2199,40 @@ double check_same_double(double* ft1, double* ft2, int count){ bool DoDouble(double* doubles, int cnt, int algorithm) { // compress const char* input = (const char*)doubles; - int input_len = cnt * sizeof(double); - char* output = (char*) taosMemoryMalloc(input_len); - int output_len = input_len; - char* buff = (char*) taosMemoryMalloc(input_len); - int buff_len = input_len; + int input_len = cnt * sizeof(double); + char* output = (char*)taosMemoryMalloc(input_len); + int output_len = input_len; + char* buff = (char*)taosMemoryMalloc(input_len); + int buff_len = input_len; cost_start(); int ret_len = 0; - if(algorithm == 2) - ret_len = tsCompressDouble((void*)input, input_len, cnt, output, output_len, algorithm, buff, buff_len); + if (algorithm == 2) + ret_len = tsCompressDouble((void*)input, input_len, cnt, output, output_len, algorithm, buff, buff_len); else - ret_len = tsCompressDoubleLossy((void*)input, input_len, cnt, output, output_len, algorithm, buff, buff_len); + ret_len = tsCompressDoubleLossy((void*)input, input_len, cnt, output, output_len, algorithm, buff, buff_len); - if(ret_len == -1) { + if (ret_len == -1) { printf(" compress error.\n"); return 0; } double use_ms1 = cost_end("compress"); printf(" compress len=%d input len=%d\n", ret_len, input_len); - double rate=100*(double)ret_len/(double)input_len; - printf(" compress rate=%.1f an-rate=%.4f%%\n", (double)input_len/(double)ret_len, rate); - - // + double rate = 100 * (double)ret_len / (double)input_len; + printf(" compress rate=%.1f an-rate=%.4f%%\n", (double)input_len / (double)ret_len, rate); + + // // decompress // - double* ft2 = (double*)taosMemoryMalloc(input_len); + double* ft2 = (double*)taosMemoryMalloc(input_len); cost_start(); int code = 0; - if(algorithm == 2) - code = tsDecompressDouble(output, ret_len, cnt, (char*)ft2, input_len, algorithm, buff, buff_len); + if (algorithm == 2) + code = tsDecompressDouble(output, ret_len, cnt, (char*)ft2, input_len, algorithm, buff, buff_len); else - code = tsDecompressDoubleLossy(output, ret_len, cnt, (char*)ft2, input_len, algorithm, buff, buff_len); - + code = tsDecompressDoubleLossy(output, ret_len, cnt, (char*)ft2, input_len, algorithm, buff, buff_len); double use_ms2 = cost_end("Decompress"); printf(" Decompress return length=%d \n", code); @@ -251,19 +2240,18 @@ bool DoDouble(double* doubles, int cnt, int algorithm) { // compare same double same_rate = check_same_double(doubles, ft2, cnt); - printf("\n ------------------ count:%d <%s> ---------------- \n", cnt, algorithm == 2?"TD":"SZ"); + printf("\n ------------------ count:%d <%s> ---------------- \n", cnt, algorithm == 2 ? "TD" : "SZ"); printf(" Compress Rate ......... [%.2f%%] \n", rate); - double speed1 = (cnt*sizeof(double)*1000/1024/1024)/use_ms1; + double speed1 = (cnt * sizeof(double) * 1000 / 1024 / 1024) / use_ms1; printf(" Compress Time ......... [%.4fms] speed=%.1f MB/s\n", use_ms1, speed1); - double speed2 = (cnt*sizeof(double)*1000/1024/1024)/use_ms2; + double speed2 = (cnt * sizeof(double) * 1000 / 1024 / 1024) / use_ms2; printf(" Decompress Time........ [%.4fms] speed=%.1f MB/s\n", use_ms2, speed2); printf(" Same Rate ............. [%.0f%%] \n\n", same_rate); - // free taosMemoryFree(ft2); taosMemoryFree(buff); - taosMemoryFree(output); + taosMemoryFree(output); return true; } @@ -271,68 +2259,66 @@ bool DoDouble(double* doubles, int cnt, int algorithm) { bool DoFloat(float* floats, int cnt, int algorithm, bool lossy) { // compress const char* input = (const char*)floats; - int input_len = cnt * sizeof(float); - char* output = (char*) taosMemoryMalloc(input_len); - int output_len = input_len; - char* buff = (char*) taosMemoryMalloc(input_len); - int buff_len = input_len; + int input_len = cnt * sizeof(float); + char* output = (char*)taosMemoryMalloc(input_len); + int output_len = input_len; + char* buff = (char*)taosMemoryMalloc(input_len); + int buff_len = input_len; cost_start(); int ret_len = 0; ret_len = tsCompressFloat((void*)input, input_len, cnt, output, output_len, algorithm, buff, buff_len); - - if(ret_len == -1) { + + if (ret_len == -1) { printf(" compress error.\n"); return 0; } double use_ms1 = cost_end("compress"); printf(" compress len=%d input len=%d\n", ret_len, input_len); - float rate=100*(float)ret_len/(float)input_len; - printf(" compress rate=%.1f an-rate=%.4f%%\n", (float)input_len/(float)ret_len, rate); - - // + float rate = 100 * (float)ret_len / (float)input_len; + printf(" compress rate=%.1f an-rate=%.4f%%\n", (float)input_len / (float)ret_len, rate); + + // // decompress // - float* ft2 = (float*)taosMemoryMalloc(input_len); + float* ft2 = (float*)taosMemoryMalloc(input_len); cost_start(); int code = 0; code = tsDecompressFloat(output, ret_len, cnt, (char*)ft2, input_len, algorithm, buff, buff_len); - + double use_ms2 = cost_end("Decompress"); printf(" Decompress return length=%d \n", code); // compare same float same_rate = check_same(floats, ft2, cnt); - printf("\n ------------------ count:%d <%s> ---------------- \n", cnt, lossy?"SZ":"TD"); + printf("\n ------------------ count:%d <%s> ---------------- \n", cnt, lossy ? "SZ" : "TD"); printf(" Compress Rate ......... [%.2f%%] \n", rate); - double speed1 = (cnt*sizeof(float)*1000/1024/1024)/use_ms1; + double speed1 = (cnt * sizeof(float) * 1000 / 1024 / 1024) / use_ms1; printf(" Compress Time ......... [%.4fms] speed=%.1f MB/s\n", use_ms1, speed1); - double speed2 = (cnt*sizeof(float)*1000/1024/1024)/use_ms2; + double speed2 = (cnt * sizeof(float) * 1000 / 1024 / 1024) / use_ms2; printf(" Decompress Time........ [%.4fms] speed=%.1f MB/s\n", use_ms2, speed2); printf(" Same Rate ............. [%.0f%%] \n\n", same_rate); - // free taosMemoryFree(ft2); taosMemoryFree(buff); - taosMemoryFree(output); + taosMemoryFree(output); return true; } - -bool testFile(const char* inFile, char algorithm, bool lossy){ +bool testFile(const char* inFile, char algorithm, bool lossy) { // check valid - if(inFile == NULL || inFile[0] == 0 ){ + if (inFile == NULL || inFile[0] == 0) { printf(" inFile is NULL or EMPTY.\n"); return false; } - int cnt = 0; + int cnt = 0; float* floats = read_float(inFile, &cnt); - if(floats == NULL) { + if (floats == NULL) { return false; } @@ -345,54 +2331,54 @@ bool testFile(const char* inFile, char algorithm, bool lossy){ // txt to binary file // #define BUFF_CNT 256 -bool txt_to_bin(const char* inFile, const char* outFile){ +bool txt_to_bin(const char* inFile, const char* outFile) { // check valid - if(inFile == NULL || outFile == NULL || inFile[0] == 0 || outFile[0] == 0){ + if (inFile == NULL || outFile == NULL || inFile[0] == 0 || outFile[0] == 0) { printf(" inFile or outFile is NULL or EMPTY.\n"); return false; } - printf(" infile=%s \n", inFile); + printf(" infile=%s \n", inFile); printf(" outfile=%s \n", outFile); // read in file - TdFilePtr pfin = taosOpenFile(inFile, TD_FILE_READ); - if(pfin == NULL){ + TdFilePtr pfin = taosOpenFile(inFile, TD_FILE_READ); + if (pfin == NULL) { printf(" open IN file %s error. errno=%d\n", inFile, errno); return false; } // create out file TdFilePtr pfout = taosOpenFile(outFile, TD_FILE_WRITE); - if(pfout == NULL){ + if (pfout == NULL) { printf(" open OUT file %s error. errno=%d\n", outFile, errno); taosCloseFile(&pfin); return false; } // read one line from infile and write to outfile - char buf[256]={0}; + char buf[256] = {0}; float fbuf[BUFF_CNT] = {0}; int fi = 0; int count = 0; - while(taosGetsFile(pfin, sizeof(buf), buf) > 0) { + while (taosGetsFile(pfin, sizeof(buf), buf) > 0) { // get item fbuf[fi] = toFloat(buf); - if ( ++fi == BUFF_CNT ) { + if (++fi == BUFF_CNT) { // write - if(taosWriteFile(pfout,fbuf, sizeof(float)*BUFF_CNT) <= 0) { + if (taosWriteFile(pfout, fbuf, sizeof(float) * BUFF_CNT) <= 0) { printf(" write to file %s error , code=%d . app exit.\n", outFile, errno); exit(1); } fi = 0; } - count ++; + count++; memset(buf, 0, sizeof(buf)); } // write retain - if( fi > 0){ - if(taosWriteFile(pfout, fbuf, sizeof(float)*fi) <= 0) { + if (fi > 0) { + if (taosWriteFile(pfout, fbuf, sizeof(float) * fi) <= 0) { printf(" write to file %s error , code=%d . app exit.\n", outFile, errno); exit(1); } @@ -403,69 +2389,67 @@ bool txt_to_bin(const char* inFile, const char* outFile){ taosCloseFile(&pfout); // total - printf(" count=%d write bytes=%d \n", count, (int)(count*sizeof(float))); + printf(" count=%d write bytes=%d \n", count, (int)(count * sizeof(float))); return true; } - int memTestDouble() { // douelbe - const char* input = (const char*) g_de1; - double* de1 = g_de1; - int input_len = sizeof(g_de1); - int cnt = input_len/sizeof(double); + const char* input = (const char*)g_de1; + double* de1 = g_de1; + int input_len = sizeof(g_de1); + int cnt = input_len / sizeof(double); printf(" input input_len=%d count=%d \n", input_len, cnt); - char* output = (char*) taosMemoryMalloc(input_len); - int output_len = input_len; + char* output = (char*)taosMemoryMalloc(input_len); + int output_len = input_len; - char buff[1024] ={0}; - int buff_len = sizeof(buff); + char buff[1024] = {0}; + int buff_len = sizeof(buff); cost_start(); int ret_len = tsCompressDoubleLossy(input, input_len, cnt, output, output_len, ONE_STAGE_COMP, buff, buff_len); - if(ret_len == -1) { + if (ret_len == -1) { printf(" compress error.\n"); return 0; } cost_end(" tscompress"); printf(" compress return len=%d input len=%d\n", ret_len, input_len); - printf(" compress rate=%.1f an-rate=%.0f%%\n", (float)input_len/(float)ret_len, 100*(float)ret_len/(float)input_len); - - // + printf(" compress rate=%.1f an-rate=%.0f%%\n", (float)input_len / (float)ret_len, + 100 * (float)ret_len / (float)input_len); + + // // decompress // - double* de2 = (double*)taosMemoryMalloc(input_len); + double* de2 = (double*)taosMemoryMalloc(input_len); cost_start(); int code = tsDecompressDoubleLossy(output, ret_len, cnt, (char*)de2, input_len, ONE_STAGE_COMP, buff, buff_len); cost_end("tsde-compress double"); printf(" de-compress return code=%d \n", code); - // // show // - int same_cnt = 0; - int diffshow_cnt = 0; - for(int i=0; i< cnt; i++){ + int same_cnt = 0; + int diffshow_cnt = 0; + for (int i = 0; i < cnt; i++) { + if (i < 10) printf(" i=%d de1=%.20f de2=%.20f same=%d\n", i, de1[i], de2[i], de1[i] == de2[i]); - if(i < 10) - printf(" i=%d de1=%.20f de2=%.20f same=%d\n", i, de1[i], de2[i], de1[i] == de2[i]); - - if(de1[i] == de2[i]) - same_cnt ++; + if (de1[i] == de2[i]) + same_cnt++; else { notsame_cnt++; - if(i >= 10 && ++diffshow_cnt < 50){ - printf(" i=%d de1=%.20f de2=%.20f diff\n", i, de1[i], de2[i]); + if (i >= 10 && ++diffshow_cnt < 50) { + printf(" i=%d de1=%.20f de2=%.20f diff\n", i, de1[i], de2[i]); } } } - - printf(" ---- result doulbe : same =%d cnt=%d rate:%d%% global not same=%d---- \n", same_cnt, cnt, same_cnt*100/cnt, notsame_cnt); - - taosMemoryFree(output); + + printf(" ---- result doulbe : same =%d cnt=%d rate:%d%% global not same=%d---- \n", same_cnt, cnt, + same_cnt * 100 / cnt, notsame_cnt); + + taosMemoryFree(output); taosMemoryFree(de2); return 1; } @@ -473,10 +2457,10 @@ int memTestDouble() { // fill float void fillFloat(float* ft, int cnt) { printf("generate float cnt = %d.\n", cnt); - for(int i=0; i < cnt; i++){ - float v = taosRand() + ((float)taosRand())/10000; + for (int i = 0; i < cnt; i++) { + float v = taosRand() + ((float)taosRand()) / 10000; ft[i] = v; - if(i % 100 == 0){ + if (i % 100 == 0) { printf("\n i=%d %f", i, v); } else { printf(" %f", v); @@ -486,91 +2470,87 @@ void fillFloat(float* ft, int cnt) { printf("\nend generate.\n"); } - int memTest() { - // - //float ft1[] = {1.2, 2.4, 3.33, 4.444, 5.555, 6.6666, 7.7777, 8.88888,1.2, 2.4, 3.33, 4.444, 5.555, 6.6666, 7.7777, 8.88888,1.2, 2.4, 3.33, 4.444, 5.555, 6.6666, 7.7777, 8.88888}; + // float ft1[] = + // {1.2, 2.4, 3.33, 4.444, 5.555, 6.6666, 7.7777, 8.88888,1.2, 2.4, 3.33, 4.444, 5.555, 6.6666, 7.7777, 8.88888,1.2, 2.4, + // 3.33, 4.444, 5.555, 6.6666, 7.7777, 8.88888}; // - float* ft1 = g_ft1; - const char* input = (const char*) ft1; - int input_len = sizeof(g_ft1); - int cnt = input_len/sizeof(float); + float* ft1 = g_ft1; + const char* input = (const char*)ft1; + int input_len = sizeof(g_ft1); + int cnt = input_len / sizeof(float); printf(" input input_len=%d count=%d \n", input_len, cnt); - - - char* output = (char*) taosMemoryMalloc(input_len); - int output_len = input_len; + char* output = (char*)taosMemoryMalloc(input_len); + int output_len = input_len; - char buff[1024] ={0}; - int buff_len = sizeof(buff); + char buff[1024] = {0}; + int buff_len = sizeof(buff); cost_start(); int ret_len = tsCompressFloatLossy(input, input_len, cnt, output, output_len, ONE_STAGE_COMP, buff, buff_len); - if(ret_len == -1) { + if (ret_len == -1) { printf(" compress error.\n"); return 0; } cost_end(" tscompress"); printf(" compress return len=%d input len=%d\n", ret_len, input_len); - printf(" compress sz rate=%.1f an-rate=%.2f%%\n", (float)input_len/(float)ret_len, 100*(float)ret_len/(float)input_len); - - // + printf(" compress sz rate=%.1f an-rate=%.2f%%\n", (float)input_len / (float)ret_len, + 100 * (float)ret_len / (float)input_len); + + // // decompress // - float* ft2 = (float*)taosMemoryMalloc(input_len); + float* ft2 = (float*)taosMemoryMalloc(input_len); cost_start(); int code = tsDecompressFloatLossy(output, ret_len, cnt, (char*)ft2, input_len, ONE_STAGE_COMP, buff, buff_len); cost_end("tsde-compress"); printf(" de-compress return code=%d \n", code); - // // show // - int same_cnt = 0; - int diffshow_cnt = 0; - for(int i=0; i< cnt; i++){ + int same_cnt = 0; + int diffshow_cnt = 0; + for (int i = 0; i < cnt; i++) { + if (i < 10) printf(" i=%d ft1=%.20f ft2=%.20f same=%d\n", i, ft1[i], ft2[i], ft1[i] == ft2[i]); - if(i < 10) - printf(" i=%d ft1=%.20f ft2=%.20f same=%d\n", i, ft1[i], ft2[i], ft1[i] == ft2[i]); - - if(ft1[i] == ft2[i]) - same_cnt ++; + if (ft1[i] == ft2[i]) + same_cnt++; else { notsame_cnt++; - if(i >= 10 && ++diffshow_cnt < 50){ - printf(" i=%d ft1=%.20f ft2=%.20f diff\n", i, ft1[i], ft2[i]); + if (i >= 10 && ++diffshow_cnt < 50) { + printf(" i=%d ft1=%.20f ft2=%.20f diff\n", i, ft1[i], ft2[i]); } } } - - printf(" ---- result : same =%d cnt=%d rate:%d%% global not same=%d---- \n", same_cnt, cnt, same_cnt*100/cnt, notsame_cnt); - - taosMemoryFree(output); + + printf(" ---- result : same =%d cnt=%d rate:%d%% global not same=%d---- \n", same_cnt, cnt, same_cnt * 100 / cnt, + notsame_cnt); + + taosMemoryFree(output); taosMemoryFree(ft2); return 1; } void* memTestThread(void* lparam) { - //memTest(); + // memTest(); printf(" enter thread ....\n"); - for(int i=0; i<1; i++) - { - memTest(); - printf(" start i=%d .... \n", i); + for (int i = 0; i < 1; i++) { + memTest(); + printf(" start i=%d .... \n", i); } return NULL; } -void test_threadsafe(int thread_count){ +void test_threadsafe(int thread_count) { printf(" test thread safe . thread count=%d \n", thread_count); TdThread handle[1000000]; - int i=0; - for(i=0; i< thread_count; i++){ + int i = 0; + for (i = 0; i < thread_count; i++) { printf(" create thread %d... \n", i); TdThreadAttr attr; taosThreadAttrInit(&attr); @@ -578,32 +2558,28 @@ void test_threadsafe(int thread_count){ taosThreadAttrDestroy(&attr); } - for(i=0; i< thread_count; i++) - { + for (i = 0; i < thread_count; i++) { taosThreadJoin(handle[i], NULL); } - + printf(" test thread safe end. not same count=%d\n", notsame_cnt); - } - void* memTestThreadDouble(void* lparam) { - //memTest(); + // memTest(); printf(" enter thread ....\n"); - for(int i=0; i< 1; i++) - { - memTest(); - printf(" double start i=%d .... \n", i); + for (int i = 0; i < 1; i++) { + memTest(); + printf(" double start i=%d .... \n", i); } return NULL; } -void test_threadsafe_double(int thread_count){ +void test_threadsafe_double(int thread_count) { printf(" test thread safe . thread count=%d \n", thread_count); TdThread handle[1000000]; - int i=0; - for(i=0; i< thread_count; i++){ + int i = 0; + for (i = 0; i < thread_count; i++) { printf(" create thread %d... \n", i); TdThreadAttr attr; taosThreadAttrInit(&attr); @@ -611,29 +2587,26 @@ void test_threadsafe_double(int thread_count){ taosThreadAttrDestroy(&attr); } - for(i=0; i< thread_count; i++) - { + for (i = 0; i < thread_count; i++) { taosThreadJoin(handle[i], NULL); } - + printf("\n ---- double test thread safe end. not same count=%d-----\n", notsame_cnt); - } void unitTestFloat() { - - float ft1 [] = {1.11, 2.22, 3.333}; - int cnt = sizeof(ft1)/sizeof(float); + float ft1[] = {1.11, 2.22, 3.333}; + int cnt = sizeof(ft1) / sizeof(float); float* floats = ft1; - int algorithm = 2; + int algorithm = 2; // compress const char* input = (const char*)floats; - int input_len = cnt * sizeof(float); - int output_len = input_len + 1024; - char* output = (char*) taosMemoryMalloc(output_len); - char* buff = (char*) taosMemoryMalloc(input_len); - int buff_len = input_len; + int input_len = cnt * sizeof(float); + int output_len = input_len + 1024; + char* output = (char*)taosMemoryMalloc(output_len); + char* buff = (char*)taosMemoryMalloc(input_len); + int buff_len = input_len; printf(" ft1 have count=%d \n", cnt); strcpy(output, "abcde"); @@ -642,24 +2615,23 @@ void unitTestFloat() { int ret_len = 0; ret_len = tsCompressFloatLossy(input, input_len, cnt, output, output_len, algorithm, buff, buff_len); - if(ret_len == 0) { + if (ret_len == 0) { printf(" compress error.\n"); - return ; + return; } double use_ms1 = cost_end("compress"); printf(" compress len=%d input len=%d\n", ret_len, input_len); - float rate=100*(float)ret_len/(float)input_len; - printf(" compress rate=%.1f an-rate=%.4f%%\n", (float)input_len/(float)ret_len, rate); - - // + float rate = 100 * (float)ret_len / (float)input_len; + printf(" compress rate=%.1f an-rate=%.4f%%\n", (float)input_len / (float)ret_len, rate); + + // // decompress // - float* ft2 = (float*)taosMemoryMalloc(input_len); + float* ft2 = (float*)taosMemoryMalloc(input_len); cost_start(); int code = 0; code = tsDecompressFloatLossy(output, ret_len, cnt, (char*)ft2, input_len, algorithm, buff, buff_len); - double use_ms2 = cost_end("Decompress"); printf(" Decompress return length=%d \n", code); @@ -669,175 +2641,164 @@ void unitTestFloat() { printf("\n ------------------ count:%d TD ---------------- \n", cnt); printf(" Compress Rate ......... [%.0f%%] \n", rate); - double speed1 = (cnt*sizeof(float)*1000/1024/1024)/use_ms1; + double speed1 = (cnt * sizeof(float) * 1000 / 1024 / 1024) / use_ms1; printf(" Compress Time ......... [%.4fms] speed=%.1f MB/s\n", use_ms1, speed1); - double speed2 = (cnt*sizeof(float)*1000/1024/1024)/use_ms2; + double speed2 = (cnt * sizeof(float) * 1000 / 1024 / 1024) / use_ms2; printf(" Decompress Time........ [%.4fms] speed=%.1f MB/s\n", use_ms2, speed2); printf(" Same Rate ............. [%.0f%%] \n\n", same_rate); - // free taosMemoryFree(ft2); taosMemoryFree(buff); - taosMemoryFree(output); + taosMemoryFree(output); } void leakFloat() { - - int cnt = sizeof(g_ft1)/sizeof(float); + int cnt = sizeof(g_ft1) / sizeof(float); float* floats = g_ft1; - int algorithm = 2; + int algorithm = 2; // compress const char* input = (const char*)floats; - int input_len = cnt * sizeof(float); - int output_len = input_len + 1024; - char* output = (char*) taosMemoryMalloc(output_len); - char* buff = (char*) taosMemoryMalloc(input_len); - int buff_len = input_len; + int input_len = cnt * sizeof(float); + int output_len = input_len + 1024; + char* output = (char*)taosMemoryMalloc(output_len); + char* buff = (char*)taosMemoryMalloc(input_len); + int buff_len = input_len; int ret_len = 0; ret_len = tsCompressFloatLossy(input, input_len, cnt, output, output_len, algorithm, buff, buff_len); - if(ret_len == 0) { + if (ret_len == 0) { printf(" compress float error.\n"); taosMemoryFree(buff); - taosMemoryFree(output); - return ; + taosMemoryFree(output); + return; } - - float* ft2 = (float*)taosMemoryMalloc(input_len); + + float* ft2 = (float*)taosMemoryMalloc(input_len); ret_len = tsDecompressFloatLossy(output, ret_len, cnt, (char*)ft2, input_len, algorithm, buff, buff_len); - if(ret_len == 0) { + if (ret_len == 0) { printf(" decompress float error.\n"); } - + taosMemoryFree(ft2); taosMemoryFree(buff); - taosMemoryFree(output); + taosMemoryFree(output); } - -void leakTest(){ - for(int i=0; i< 90000000; i++){ - if(i%10000==0) - printf(" ---------- %d ---------------- \n", i); +void leakTest() { + for (int i = 0; i < 90000000; i++) { + if (i % 10000 == 0) printf(" ---------- %d ---------------- \n", i); leakFloat(); } } #define DB_CNT 500 -void test_same_float(int algo, bool lossy){ - float ori = 123.456789123; - float floats [DB_CNT]; - for(int i=0; i< DB_CNT; i++){ +void test_same_float(int algo, bool lossy) { + float ori = 123.456789123; + float floats[DB_CNT]; + for (int i = 0; i < DB_CNT; i++) { floats[i] = ori; - } + } DoFloat(floats, DB_CNT, algo, lossy); } -void test_same_double(int algo){ - double ori = 3.1415926; +void test_same_double(int algo) { + double ori = 3.1415926; - double doubles [DB_CNT]; - for(int i=0; i< DB_CNT; i++){ + double doubles[DB_CNT]; + for (int i = 0; i < DB_CNT; i++) { doubles[i] = ori; - } + } DoDouble(doubles, DB_CNT, algo); } -#ifdef TD_TSZ - extern char tsLossyColumns[]; extern bool lossyDouble; extern bool lossyFloat; -extern double tsFPrecision; // float column precision -extern double tsDPrecision; // double column precision -extern uint32_t tsMaxRange; // max quantization intervals -extern uint32_t tsCurRange; // current quantization intervals -extern bool tsIfAdtFse; // ADT-FSE algorithom or original huffman algorithom +extern double tsFPrecision; // float column precision +extern double tsDPrecision; // double column precision +extern uint32_t tsMaxRange; // max quantization intervals +extern uint32_t tsCurRange; // current quantization intervals +extern bool tsIfAdtFse; // ADT-FSE algorithom or original huffman algorithom extern char tsCompressor[32]; -#endif // // ----------------- main ---------------------- // -int main(int argc, char *argv[]) { +int main(int argc, char* argv[]) { printf("welcome to use taospack tools v1.6\n"); - //printf(" sizeof(int)=%d\n", (int)sizeof(int)); - //printf(" sizeof(long)=%d\n", (int)sizeof(long)); - //printf(" sizeof(short)=%d\n",(int)sizeof(short)); - - + // printf(" sizeof(int)=%d\n", (int)sizeof(int)); + // printf(" sizeof(long)=%d\n", (int)sizeof(long)); + // printf(" sizeof(short)=%d\n",(int)sizeof(short)); + strcpy(tsLossyColumns, "float|double"); bool lossy = true; - //fPrecision = 1E-5; - //strcpy(Compressor, "GZIP_COMPRESSOR"); + // fPrecision = 1E-5; + // strcpy(Compressor, "GZIP_COMPRESSOR"); tsCompressInit(tsLossyColumns, tsFPrecision, tsDPrecision, tsMaxRange, tsCurRange, (int)tsIfAdtFse, tsCompressor); lossyFloat = lossyDouble = true; - printf(" fPrecision=%.15f\n",tsFPrecision); + printf(" fPrecision=%.15f\n", tsFPrecision); - // - //tsCompressExit(); - //return 1; - //printf(" SZ_SIZE_TYPE=%d", ) + // tsCompressExit(); + // return 1; + // printf(" SZ_SIZE_TYPE=%d", ) - if(argc == 3){ + if (argc == 3) { char algo = 0; // t - if(strcmp(argv[1], "-tone") == 0 || strcmp(argv[1], "-t") == 0 ) { - algo = ONE_STAGE_COMP; - lossyFloat = lossyDouble = true; + if (strcmp(argv[1], "-tone") == 0 || strcmp(argv[1], "-t") == 0) { + algo = ONE_STAGE_COMP; + lossyFloat = lossyDouble = true; } - if(strcmp(argv[1], "-tw") == 0) { - algo = TWO_STAGE_COMP; - lossy = false; - lossyFloat = lossyDouble = false; + if (strcmp(argv[1], "-tw") == 0) { + algo = TWO_STAGE_COMP; + lossy = false; + lossyFloat = lossyDouble = false; } - if(strcmp(argv[1], "-sf") == 0) { - test_threadsafe(atoi(argv[2])); - return 0; + if (strcmp(argv[1], "-sf") == 0) { + test_threadsafe(atoi(argv[2])); + return 0; } - if(strcmp(argv[1], "-sd") == 0) { - test_threadsafe_double(atoi(argv[2])); - return 0; + if (strcmp(argv[1], "-sd") == 0) { + test_threadsafe_double(atoi(argv[2])); + return 0; } - if(strcmp(argv[1], "-samef") == 0) { - test_same_float(atoi(argv[2]), true); - return 0; + if (strcmp(argv[1], "-samef") == 0) { + test_same_float(atoi(argv[2]), true); + return 0; } - if(strcmp(argv[1], "-samed") == 0) { - test_same_double(atoi(argv[2])); - return 0; + if (strcmp(argv[1], "-samed") == 0) { + test_same_double(atoi(argv[2])); + return 0; } - - if(algo == 0){ + + if (algo == 0) { printf(" no param -tone -tw \n"); return 0; } - + bool ret = testFile(argv[2], algo, lossy); printf(" test file %s. \n", ret ? "ok" : "err"); return 1; - } else if( argc == 2) { - if(strcmp(argv[1], "-mem") == 0) { + } else if (argc == 2) { + if (strcmp(argv[1], "-mem") == 0) { memTest(); - } - else if(strcmp(argv[1], "-leak") == 0) { + } else if (strcmp(argv[1], "-leak") == 0) { leakTest(); } - } - else{ + } else { unitTestFloat(); } @@ -846,4 +2807,3 @@ int main(int argc, char *argv[]) { } #endif - From a247a43863e17b4ebb79dd3d196670ca609bd5f8 Mon Sep 17 00:00:00 2001 From: Yihao Deng Date: Wed, 8 May 2024 06:55:29 +0000 Subject: [PATCH 04/33] change compress --- source/common/src/tglobal.c | 8 ++++---- source/libs/parser/src/parAstParser.c | 24 ++++++++++-------------- source/util/src/tcompression.c | 6 +++--- 3 files changed, 17 insertions(+), 21 deletions(-) diff --git a/source/common/src/tglobal.c b/source/common/src/tglobal.c index fa4e60eb89..3aaf6531c0 100644 --- a/source/common/src/tglobal.c +++ b/source/common/src/tglobal.c @@ -127,7 +127,7 @@ bool tsEnableTelem = true; int32_t tsTelemInterval = 43200; char tsTelemServer[TSDB_FQDN_LEN] = "telemetry.tdengine.com"; uint16_t tsTelemPort = 80; -char * tsTelemUri = "/report"; +char *tsTelemUri = "/report"; #ifdef TD_ENTERPRISE bool tsEnableCrashReport = false; @@ -1452,7 +1452,7 @@ void taosCleanupCfg() { typedef struct { const char *optionName; - void * optionVar; + void *optionVar; } OptionNameAndVar; static int32_t taosCfgSetOption(OptionNameAndVar *pOptions, int32_t optionSize, SConfigItem *pItem, bool isDebugflag) { @@ -1465,7 +1465,7 @@ static int32_t taosCfgSetOption(OptionNameAndVar *pOptions, int32_t optionSize, switch (pItem->dtype) { case CFG_DTYPE_BOOL: { int32_t flag = pItem->i32; - bool * pVar = pOptions[d].optionVar; + bool *pVar = pOptions[d].optionVar; uInfo("%s set from %d to %d", optName, *pVar, flag); *pVar = flag; terrno = TSDB_CODE_SUCCESS; @@ -1863,7 +1863,7 @@ static void taosSetAllDebugFlag(SConfig *pCfg, int32_t flag) { return; } - SArray * noNeedToSetVars = NULL; + SArray *noNeedToSetVars = NULL; SConfigItem *pItem = cfgGetItem(pCfg, "debugFlag"); if (pItem != NULL) { pItem->i32 = flag; diff --git a/source/libs/parser/src/parAstParser.c b/source/libs/parser/src/parAstParser.c index 3da6ac668c..40d2c33087 100644 --- a/source/libs/parser/src/parAstParser.c +++ b/source/libs/parser/src/parAstParser.c @@ -42,7 +42,6 @@ int32_t buildQueryAfterParse(SQuery** pQuery, SNode* pRootNode, int16_t placehol return TSDB_CODE_SUCCESS; } - int32_t parse(SParseContext* pParseCxt, SQuery** pQuery) { SAstCreateContext cxt; initAstCreateContext(pParseCxt, &cxt); @@ -631,8 +630,8 @@ static int32_t collectMetaKeyFromShowCompacts(SCollectMetaKeyCxt* pCxt, SShowStm } static int32_t collectMetaKeyFromShowCompactDetails(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) { - int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_COMPACT_DETAILS, - pCxt->pMetaCache); + int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, + TSDB_INS_TABLE_COMPACT_DETAILS, pCxt->pMetaCache); return code; } @@ -687,7 +686,7 @@ static int32_t collectMetaKeyFromShowCreateView(SCollectMetaKeyCxt* pCxt, SShowC int32_t code = catalogRemoveViewMeta(pCxt->pParseCxt->pCatalog, dbFName, 0, pStmt->viewName, 0); if (TSDB_CODE_SUCCESS == code) { code = reserveViewUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, pStmt->viewName, - AUTH_TYPE_READ, pCxt->pMetaCache); + AUTH_TYPE_READ, pCxt->pMetaCache); } if (TSDB_CODE_SUCCESS == code) { code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->viewName, pCxt->pMetaCache); @@ -696,7 +695,6 @@ static int32_t collectMetaKeyFromShowCreateView(SCollectMetaKeyCxt* pCxt, SShowC return code; } - static int32_t collectMetaKeyFromShowApps(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) { return reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_PERFORMANCE_SCHEMA_DB, TSDB_PERFS_TABLE_APPS, pCxt->pMetaCache); @@ -755,24 +753,22 @@ static int32_t collectMetaKeyFromRevoke(SCollectMetaKeyCxt* pCxt, SRevokeStmt* p return reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->objName, pStmt->tabName, pCxt->pMetaCache); } - static int32_t collectMetaKeyFromCreateViewStmt(SCollectMetaKeyCxt* pCxt, SCreateViewStmt* pStmt) { - int32_t code = - reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->viewName, pCxt->pMetaCache); + int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->viewName, pCxt->pMetaCache); if (TSDB_CODE_SUCCESS == code) { code = reserveUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, NULL, AUTH_TYPE_WRITE, pCxt->pMetaCache); } if (TSDB_CODE_SUCCESS == code) { - code = reserveViewUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, pStmt->viewName, AUTH_TYPE_ALTER, - pCxt->pMetaCache); + code = reserveViewUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, pStmt->viewName, + AUTH_TYPE_ALTER, pCxt->pMetaCache); } return code; } static int32_t collectMetaKeyFromDropViewStmt(SCollectMetaKeyCxt* pCxt, SDropViewStmt* pStmt) { - int32_t code = reserveViewUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, pStmt->viewName, AUTH_TYPE_ALTER, - pCxt->pMetaCache); + int32_t code = reserveViewUserAuthInCache(pCxt->pParseCxt->acctId, pCxt->pParseCxt->pUser, pStmt->dbName, + pStmt->viewName, AUTH_TYPE_ALTER, pCxt->pMetaCache); return code; } @@ -783,7 +779,7 @@ static int32_t collectMetaKeyFromCreateTSMAStmt(SCollectMetaKeyCxt* pCxt, SCreat code = reserveTSMAInfoInCache(pCxt->pParseCxt->acctId, pStmt->dbName, pStmt->tableName, pCxt->pMetaCache); if (TSDB_CODE_SUCCESS == code) { char dstTbName[TSDB_TABLE_NAME_LEN] = {0}; - snprintf(dstTbName, TSDB_TABLE_NAME_LEN, "%s"TSMA_RES_STB_POSTFIX, pStmt->tableName); + snprintf(dstTbName, TSDB_TABLE_NAME_LEN, "%s" TSMA_RES_STB_POSTFIX, pStmt->tableName); code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, pStmt->dbName, dstTbName, pCxt->pMetaCache); if (TSDB_CODE_SUCCESS == code) { code = reserveTableVgroupInCache(pCxt->pParseCxt->acctId, pStmt->dbName, dstTbName, pCxt->pMetaCache); @@ -921,7 +917,7 @@ static int32_t collectMetaKeyFromQuery(SCollectMetaKeyCxt* pCxt, SNode* pStmt) { case QUERY_NODE_SHOW_COMPACTS_STMT: return collectMetaKeyFromShowCompacts(pCxt, (SShowStmt*)pStmt); case QUERY_NODE_SHOW_COMPACT_DETAILS_STMT: - return collectMetaKeyFromShowCompactDetails(pCxt, (SShowStmt*)pStmt); + return collectMetaKeyFromShowCompactDetails(pCxt, (SShowStmt*)pStmt); case QUERY_NODE_SHOW_GRANTS_FULL_STMT: return collectMetaKeyFromShowGrantsFull(pCxt, (SShowStmt*)pStmt); case QUERY_NODE_SHOW_GRANTS_LOGS_STMT: diff --git a/source/util/src/tcompression.c b/source/util/src/tcompression.c index cc515b1b49..5a3dc867e6 100644 --- a/source/util/src/tcompression.c +++ b/source/util/src/tcompression.c @@ -347,8 +347,8 @@ int32_t tsCompressINTImp(const char *const input, const int32_t nelements, char char bit_per_integer[] = {0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 15, 20, 30, 60}; int32_t selector_to_elems[] = {240, 120, 60, 30, 20, 15, 12, 10, 8, 7, 6, 5, 4, 3, 2, 1}; char bit_to_selector[] = {0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 11, 11, 12, 12, 12, 13, 13, 13, 13, 13, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15}; + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15}; // get the byte limit. int32_t word_length = getWordLength(type); @@ -1070,7 +1070,7 @@ void encodeFloatValue(uint32_t diff, uint8_t flag, char *const output, int32_t * } int32_t tsCompressFloatImp(const char *const input, const int32_t nelements, char *const output) { - float * istream = (float *)input; + float *istream = (float *)input; int32_t byte_limit = nelements * FLOAT_BYTES + 1; int32_t opos = 1; From a0fffa7eda2b04ffcc42f36e7d76445a0f101642 Mon Sep 17 00:00:00 2001 From: kailixu Date: Thu, 9 May 2024 09:44:09 +0800 Subject: [PATCH 05/33] enh: grant support s3/active-active/dual-replica/db_encryption --- include/common/tgrant.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/include/common/tgrant.h b/include/common/tgrant.h index 5a2ed58045..7e7162204e 100644 --- a/include/common/tgrant.h +++ b/include/common/tgrant.h @@ -56,6 +56,10 @@ typedef enum { TSDB_GRANT_VIEW, TSDB_GRANT_MULTI_TIER, TSDB_GRANT_BACKUP_RESTORE, + TSDB_GRANT_OBJECT_STORAGE, + TSDB_GRANT_ACTIVE_ACTIVE, + TSDB_GRANT_DUAL_REPLICA_HA, + TSDB_GRANT_DB_ENCRYPTION, } EGrantType; int32_t checkAndGetCryptKey(const char *encryptCode, const char *machineId, char **key); From e5547eccbf5825665f6b5fb49544d2acd373fbc9 Mon Sep 17 00:00:00 2001 From: dmchen Date: Thu, 9 May 2024 02:44:38 +0000 Subject: [PATCH 06/33] encrypt grant --- include/util/taoserror.h | 1 + source/dnode/mnode/impl/src/mndDb.c | 7 +++++++ source/util/src/terror.c | 1 + 3 files changed, 9 insertions(+) diff --git a/include/util/taoserror.h b/include/util/taoserror.h index 03a024bb8c..dafdac9649 100644 --- a/include/util/taoserror.h +++ b/include/util/taoserror.h @@ -327,6 +327,7 @@ int32_t* taosGetErrno(); #define TSDB_CODE_MND_DB_IN_CREATING TAOS_DEF_ERROR_CODE(0, 0x0396) // #define TSDB_CODE_MND_INVALID_SYS_TABLENAME TAOS_DEF_ERROR_CODE(0, 0x039A) #define TSDB_CODE_MND_ENCRYPT_NOT_ALLOW_CHANGE TAOS_DEF_ERROR_CODE(0, 0x039B) +#define TSDB_CODE_MND_DB_ENCRYPT_GRANT_EXPIRED TAOS_DEF_ERROR_CODE(0, 0x039C) // mnode-node #define TSDB_CODE_MND_MNODE_ALREADY_EXIST TAOS_DEF_ERROR_CODE(0, 0x03A0) diff --git a/source/dnode/mnode/impl/src/mndDb.c b/source/dnode/mnode/impl/src/mndDb.c index 6d638dab3b..48569c0600 100644 --- a/source/dnode/mnode/impl/src/mndDb.c +++ b/source/dnode/mnode/impl/src/mndDb.c @@ -843,6 +843,13 @@ static int32_t mndCheckDbEncryptKey(SMnode *pMnode, SCreateDbReq *pReq) { } sdbRelease(pSdb, pDnode); } + + if(grantCheck(TSDB_GRANT_DB_ENCRYPTION) != 0){ + code = TSDB_CODE_MND_DB_ENCRYPT_GRANT_EXPIRED; + errno = code; + mError("db:%s, failed to create db since %s", pReq->db, terrstr()); + goto _exit; + } #else if (pReq->encryptAlgorithm != TSDB_ENCRYPT_ALGO_NONE) { code = TSDB_CODE_MND_INVALID_DB_OPTION; diff --git a/source/util/src/terror.c b/source/util/src/terror.c index 3ef656b2b4..a0b4a74ca7 100644 --- a/source/util/src/terror.c +++ b/source/util/src/terror.c @@ -259,6 +259,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_MND_DB_IN_CREATING, "Database in creating TAOS_DEFINE_ERROR(TSDB_CODE_MND_ENCRYPT_NOT_ALLOW_CHANGE, "Encryption is not allowed to be changed after database is created") TAOS_DEFINE_ERROR(TSDB_CODE_MND_INCONSIST_ENCRYPT_KEY, "Inconsistent encryption key") TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_ENCRYPT_KEY, "The cluster has not been set properly for database encryption") +TAOS_DEFINE_ERROR(TSDB_CODE_MND_DB_ENCRYPT_GRANT_EXPIRED, "The database encryption funtion grant expired") // mnode-node TAOS_DEFINE_ERROR(TSDB_CODE_MND_MNODE_ALREADY_EXIST, "Mnode already exists") From 41eb82c4de76adfc1daae84e12934043d1241c0f Mon Sep 17 00:00:00 2001 From: Minglei Jin Date: Thu, 9 May 2024 15:14:37 +0800 Subject: [PATCH 07/33] enh(s3/grant): disable s3 with expired grant --- source/dnode/mgmt/node_mgmt/CMakeLists.txt | 5 +++++ source/dnode/mgmt/node_mgmt/src/dmEnv.c | 8 ++++++++ 2 files changed, 13 insertions(+) diff --git a/source/dnode/mgmt/node_mgmt/CMakeLists.txt b/source/dnode/mgmt/node_mgmt/CMakeLists.txt index 82b9384d66..4f362f5a74 100644 --- a/source/dnode/mgmt/node_mgmt/CMakeLists.txt +++ b/source/dnode/mgmt/node_mgmt/CMakeLists.txt @@ -16,6 +16,11 @@ IF (DEFINED GRANT_CFG_INCLUDE_DIR) add_definitions(-DGRANTS_CFG) ENDIF() +IF (TD_GRANT) + ADD_DEFINITIONS(-D_GRANT) + TARGET_LINK_LIBRARIES(dnode grant) +ENDIF () + target_include_directories( dnode PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/inc" diff --git a/source/dnode/mgmt/node_mgmt/src/dmEnv.c b/source/dnode/mgmt/node_mgmt/src/dmEnv.c index 12712d6585..4619214f40 100644 --- a/source/dnode/mgmt/node_mgmt/src/dmEnv.c +++ b/source/dnode/mgmt/node_mgmt/src/dmEnv.c @@ -17,6 +17,7 @@ #include "dmMgmt.h" #include "audit.h" #include "libs/function/tudf.h" +#include "tgrant.h" #define DM_INIT_AUDIT() \ do { \ @@ -150,6 +151,7 @@ static bool dmCheckDataDirVersion() { extern int32_t s3Begin(); extern void s3End(); +extern int8_t tsS3Enabled; #endif @@ -164,6 +166,12 @@ int32_t dmInit() { if (dmInitAudit() != 0) return -1; if (dmInitDnode(dmInstance()) != 0) return -1; #if defined(USE_S3) + int32_t expired = grantCheck(TSDB_GRANT_OBJECT_STORAGE); + if (expired && tsS3Enabled) { + dWarn("s3 grant expired: %d", expired); + tsS3Enabled = false; + } + if (s3Begin() != 0) return -1; #endif From 7418711878ff8c3385f72625fbbb05b18cd5aae3 Mon Sep 17 00:00:00 2001 From: kailixu Date: Fri, 10 May 2024 17:25:33 +0800 Subject: [PATCH 08/33] test: test case for show grants full --- .../0-others/information_schema.py | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/tests/system-test/0-others/information_schema.py b/tests/system-test/0-others/information_schema.py index 2924ebd388..944b2fbb1e 100644 --- a/tests/system-test/0-others/information_schema.py +++ b/tests/system-test/0-others/information_schema.py @@ -269,13 +269,17 @@ class TDTestCase: def ins_grants_check(self): grant_name_dict = { - 'stream':'stream', - 'subscription':'subscription', - 'view':'view', - 'audit':'audit', - 'csv':'csv', - 'storage':'multi_tier_storage', - 'backup_restore':'backup_restore', + 'stream':'Stream', + 'subscription':'Subscription', + 'view':'View', + 'audit':'Audit', + 'csv':'CSV', + 'storage':'Multi-Tier Storage', + 'backup_restore':'Data Backup & Restore', + 'object_storage':'Object Storage', + 'active_active':'Active-Active', + 'dual_replica':'Dual-Replica HA', + 'db_encryption':'Database Encryption', 'opc_da':'OPC_DA', 'opc_ua':'OPC_UA', 'pi':'Pi', @@ -285,7 +289,10 @@ class TDTestCase: 'avevahistorian':'avevaHistorian', 'opentsdb':'OpenTSDB', 'td2.6':'TDengine2.6', - 'td3.0':'TDengine3.0' + 'td3.0':'TDengine3.0', + 'mysql':'MySQL', + 'postgres':'PostgreSQL', + 'oracle':'Oracle', } tdSql.execute('drop database if exists db2') @@ -297,7 +304,7 @@ class TDTestCase: if result[i][0] in grant_name_dict: tdSql.checkEqual(result[i][1], grant_name_dict[result[i][0]]) index += 1 - tdSql.checkEqual(index, 17) + tdSql.checkEqual(index, 24) tdSql.query(f'select * from information_schema.ins_grants_logs') result = tdSql.queryResult tdSql.checkEqual(True, len(result) >= 0) From 9cf2529cacf7d78525588114a49372386db24045 Mon Sep 17 00:00:00 2001 From: dmchen Date: Sat, 11 May 2024 02:12:31 +0000 Subject: [PATCH 09/33] check grant first --- source/dnode/mnode/impl/src/mndDb.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/source/dnode/mnode/impl/src/mndDb.c b/source/dnode/mnode/impl/src/mndDb.c index 48569c0600..9bc370c466 100644 --- a/source/dnode/mnode/impl/src/mndDb.c +++ b/source/dnode/mnode/impl/src/mndDb.c @@ -820,6 +820,13 @@ static int32_t mndCheckDbEncryptKey(SMnode *pMnode, SCreateDbReq *pReq) { void *pIter = NULL; #ifdef TD_ENTERPRISE + if(grantCheck(TSDB_GRANT_DB_ENCRYPTION) != 0){ + code = TSDB_CODE_MND_DB_ENCRYPT_GRANT_EXPIRED; + errno = code; + mError("db:%s, failed to create db since %s", pReq->db, terrstr()); + goto _exit; + } + if (pReq->encryptAlgorithm == TSDB_ENCRYPT_ALGO_NONE) goto _exit; if (tsEncryptionKeyStat != ENCRYPT_KEY_STAT_LOADED) { code = TSDB_CODE_MND_INVALID_ENCRYPT_KEY; @@ -844,12 +851,6 @@ static int32_t mndCheckDbEncryptKey(SMnode *pMnode, SCreateDbReq *pReq) { sdbRelease(pSdb, pDnode); } - if(grantCheck(TSDB_GRANT_DB_ENCRYPTION) != 0){ - code = TSDB_CODE_MND_DB_ENCRYPT_GRANT_EXPIRED; - errno = code; - mError("db:%s, failed to create db since %s", pReq->db, terrstr()); - goto _exit; - } #else if (pReq->encryptAlgorithm != TSDB_ENCRYPT_ALGO_NONE) { code = TSDB_CODE_MND_INVALID_DB_OPTION; From c575d7a8505a7135ad30d9da262613432460b003 Mon Sep 17 00:00:00 2001 From: Shungang Li Date: Thu, 9 May 2024 10:12:28 +0800 Subject: [PATCH 10/33] enh: grant check for dual-replica-ha --- source/dnode/mnode/impl/src/mndDb.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/source/dnode/mnode/impl/src/mndDb.c b/source/dnode/mnode/impl/src/mndDb.c index 9bc370c466..9dc06c802c 100644 --- a/source/dnode/mnode/impl/src/mndDb.c +++ b/source/dnode/mnode/impl/src/mndDb.c @@ -911,6 +911,13 @@ static int32_t mndProcessCreateDbReq(SRpcMsg *pReq) { goto _OVER; } + if (createReq.replications == 2) { + if ((terrno = grantCheck(TSDB_GRANT_DUAL_REPLICA_HA)) != 0) { + code = terrno; + goto _OVER; + } + } + if ((code = mndCheckDbEncryptKey(pMnode, &createReq)) != 0) { terrno = code; goto _OVER; @@ -1171,6 +1178,12 @@ static int32_t mndProcessAlterDbReq(SRpcMsg *pReq) { goto _OVER; } + if (alterReq.replications == 2) { + if ((code = grantCheck(TSDB_GRANT_DUAL_REPLICA_HA)) != 0) { + goto _OVER; + } + } + int32_t numOfTopics = 0; if (mndGetNumOfTopics(pMnode, pDb->name, &numOfTopics) != 0) { goto _OVER; From e3442474cfccfb0293a78cbf904339b18a0065ee Mon Sep 17 00:00:00 2001 From: kailixu Date: Sun, 12 May 2024 23:09:56 +0800 Subject: [PATCH 11/33] fix: grants for database encryption --- source/dnode/mnode/impl/src/mndDb.c | 8 ++------ source/util/src/terror.c | 2 +- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/source/dnode/mnode/impl/src/mndDb.c b/source/dnode/mnode/impl/src/mndDb.c index 9dc06c802c..f254fb16a5 100644 --- a/source/dnode/mnode/impl/src/mndDb.c +++ b/source/dnode/mnode/impl/src/mndDb.c @@ -820,14 +820,11 @@ static int32_t mndCheckDbEncryptKey(SMnode *pMnode, SCreateDbReq *pReq) { void *pIter = NULL; #ifdef TD_ENTERPRISE - if(grantCheck(TSDB_GRANT_DB_ENCRYPTION) != 0){ + if (pReq->encryptAlgorithm == TSDB_ENCRYPT_ALGO_NONE) goto _exit; + if (grantCheck(TSDB_GRANT_DB_ENCRYPTION) != 0) { code = TSDB_CODE_MND_DB_ENCRYPT_GRANT_EXPIRED; - errno = code; - mError("db:%s, failed to create db since %s", pReq->db, terrstr()); goto _exit; } - - if (pReq->encryptAlgorithm == TSDB_ENCRYPT_ALGO_NONE) goto _exit; if (tsEncryptionKeyStat != ENCRYPT_KEY_STAT_LOADED) { code = TSDB_CODE_MND_INVALID_ENCRYPT_KEY; mError("db:%s, failed to check encryption key:%" PRIi8 " in mnode leader since it's not loaded", pReq->db, @@ -850,7 +847,6 @@ static int32_t mndCheckDbEncryptKey(SMnode *pMnode, SCreateDbReq *pReq) { } sdbRelease(pSdb, pDnode); } - #else if (pReq->encryptAlgorithm != TSDB_ENCRYPT_ALGO_NONE) { code = TSDB_CODE_MND_INVALID_DB_OPTION; diff --git a/source/util/src/terror.c b/source/util/src/terror.c index a0b4a74ca7..daf0d2fe78 100644 --- a/source/util/src/terror.c +++ b/source/util/src/terror.c @@ -259,7 +259,7 @@ TAOS_DEFINE_ERROR(TSDB_CODE_MND_DB_IN_CREATING, "Database in creating TAOS_DEFINE_ERROR(TSDB_CODE_MND_ENCRYPT_NOT_ALLOW_CHANGE, "Encryption is not allowed to be changed after database is created") TAOS_DEFINE_ERROR(TSDB_CODE_MND_INCONSIST_ENCRYPT_KEY, "Inconsistent encryption key") TAOS_DEFINE_ERROR(TSDB_CODE_MND_INVALID_ENCRYPT_KEY, "The cluster has not been set properly for database encryption") -TAOS_DEFINE_ERROR(TSDB_CODE_MND_DB_ENCRYPT_GRANT_EXPIRED, "The database encryption funtion grant expired") +TAOS_DEFINE_ERROR(TSDB_CODE_MND_DB_ENCRYPT_GRANT_EXPIRED, "The database encryption function grant expired") // mnode-node TAOS_DEFINE_ERROR(TSDB_CODE_MND_MNODE_ALREADY_EXIST, "Mnode already exists") From 939183d3df067522ead8ce407bc5522700b64740 Mon Sep 17 00:00:00 2001 From: dmchen Date: Mon, 13 May 2024 01:56:49 +0000 Subject: [PATCH 12/33] fix/TD-29772 --- include/common/tglobal.h | 2 +- source/client/src/clientEnv.c | 2 +- source/common/src/tglobal.c | 4 ++-- source/dnode/mgmt/exe/dmMain.c | 12 ++++++++---- source/libs/function/src/udfd.c | 2 +- source/libs/function/test/runUdf.c | 2 +- utils/tsim/src/simSystem.c | 2 +- 7 files changed, 15 insertions(+), 11 deletions(-) diff --git a/include/common/tglobal.h b/include/common/tglobal.h index 7c2d63e025..17ed732af8 100644 --- a/include/common/tglobal.h +++ b/include/common/tglobal.h @@ -258,7 +258,7 @@ extern bool tsExperimental; int32_t taosCreateLog(const char *logname, int32_t logFileNum, const char *cfgDir, const char **envCmd, const char *envFile, char *apolloUrl, SArray *pArgs, bool tsc); int32_t taosInitCfg(const char *cfgDir, const char **envCmd, const char *envFile, char *apolloUrl, SArray *pArgs, - bool tsc); + bool tsc, bool isDumpCfg); void taosCleanupCfg(); int32_t taosCfgDynamicOptions(SConfig *pCfg, const char *name, bool forServer); diff --git a/source/client/src/clientEnv.c b/source/client/src/clientEnv.c index 439103e5c4..036cf0420a 100644 --- a/source/client/src/clientEnv.c +++ b/source/client/src/clientEnv.c @@ -725,7 +725,7 @@ void taos_init_imp(void) { return; } - if (taosInitCfg(configDir, NULL, NULL, NULL, NULL, 1) != 0) { + if (taosInitCfg(configDir, NULL, NULL, NULL, NULL, 1, true) != 0) { tscInitRes = -1; return; } diff --git a/source/common/src/tglobal.c b/source/common/src/tglobal.c index 9223aa3c7a..fcec4d2a82 100644 --- a/source/common/src/tglobal.c +++ b/source/common/src/tglobal.c @@ -1388,7 +1388,7 @@ static int32_t taosCheckGlobalCfg() { } int32_t taosInitCfg(const char *cfgDir, const char **envCmd, const char *envFile, char *apolloUrl, SArray *pArgs, - bool tsc) { + bool tsc, bool isDumpCfg) { if (tsCfg != NULL) return 0; tsCfg = cfgInit(); @@ -1435,7 +1435,7 @@ int32_t taosInitCfg(const char *cfgDir, const char **envCmd, const char *envFile taosSetAllDebugFlag(tsCfg, cfgGetItem(tsCfg, "debugFlag")->i32); - cfgDumpCfg(tsCfg, tsc, false); + if(isDumpCfg) cfgDumpCfg(tsCfg, tsc, false); if (taosCheckGlobalCfg() != 0) { return -1; diff --git a/source/dnode/mgmt/exe/dmMain.c b/source/dnode/mgmt/exe/dmMain.c index 98459512f3..f7fcd7697f 100644 --- a/source/dnode/mgmt/exe/dmMain.c +++ b/source/dnode/mgmt/exe/dmMain.c @@ -205,11 +205,11 @@ static int32_t dmParseArgs(int32_t argc, char const *argv[]) { if(i < argc - 1) { int32_t len = strlen(argv[++i]); if (len < ENCRYPT_KEY_LEN_MIN) { - printf("encrypt key is too short, it should be great or equal to %d\n", ENCRYPT_KEY_LEN_MIN); + printf("Error: Encrypt key should be at least %d characters\n", ENCRYPT_KEY_LEN_MIN); return -1; } if (len > ENCRYPT_KEY_LEN) { - printf("encrypt key overflow, it should be less or equal to %d\n", ENCRYPT_KEY_LEN); + printf("Error: Encrypt key overflow, it should be at most %d characters\n", ENCRYPT_KEY_LEN); return -1; } tstrncpy(global.encryptKey, argv[i], ENCRYPT_KEY_LEN); @@ -325,7 +325,7 @@ int main(int argc, char const *argv[]) { } if (dmParseArgs(argc, argv) != 0) { - printf("failed to start since parse args error\n"); + //printf("failed to start since parse args error\n"); taosCleanupArgs(); return -1; } @@ -380,7 +380,11 @@ int mainWindows(int argc, char **argv) { dmPrintArgs(argc, argv); - if (taosInitCfg(configDir, global.envCmd, global.envFile, global.apolloUrl, global.pArgs, 0) != 0) { + bool isDumpCfg = true; + if(global.generateCode) { + isDumpCfg = false; + } + if (taosInitCfg(configDir, global.envCmd, global.envFile, global.apolloUrl, global.pArgs, 0, isDumpCfg) != 0) { dError("failed to start since read config error"); taosCloseLog(); taosCleanupArgs(); diff --git a/source/libs/function/src/udfd.c b/source/libs/function/src/udfd.c index 2a5e594ba3..e2ea6c1374 100644 --- a/source/libs/function/src/udfd.c +++ b/source/libs/function/src/udfd.c @@ -1424,7 +1424,7 @@ int main(int argc, char *argv[]) { printf("failed to start since init log error\n"); } - if (taosInitCfg(configDir, NULL, NULL, NULL, NULL, 0) != 0) { + if (taosInitCfg(configDir, NULL, NULL, NULL, NULL, 0, true) != 0) { fnError("failed to start since read config error"); return -2; } diff --git a/source/libs/function/test/runUdf.c b/source/libs/function/test/runUdf.c index aa8b88b738..eef6cdc3d3 100644 --- a/source/libs/function/test/runUdf.c +++ b/source/libs/function/test/runUdf.c @@ -127,7 +127,7 @@ int aggregateFuncTest() { int main(int argc, char *argv[]) { parseArgs(argc, argv); initLog(); - if (taosInitCfg(configDir, NULL, NULL, NULL, NULL, 0) != 0) { + if (taosInitCfg(configDir, NULL, NULL, NULL, NULL, 0, true) != 0) { fnError("failed to start since read config error"); return -1; } diff --git a/utils/tsim/src/simSystem.c b/utils/tsim/src/simSystem.c index dcf5d6ab12..645cf0e6fe 100644 --- a/utils/tsim/src/simSystem.c +++ b/utils/tsim/src/simSystem.c @@ -28,7 +28,7 @@ extern bool simExecSuccess; int32_t simInitCfg() { taosCreateLog("simlog", 1, configDir, NULL, NULL, NULL, NULL, 1); - taosInitCfg(configDir, NULL, NULL, NULL, NULL, 1); + taosInitCfg(configDir, NULL, NULL, NULL, NULL, 1, true); SConfig *pCfg = taosGetCfg(); tstrncpy(simScriptDir, cfgGetItem(pCfg, "scriptDir")->str, PATH_MAX); From 6e5d4119861b50fe74e2449cd28f6f5aa23aced0 Mon Sep 17 00:00:00 2001 From: Yihao Deng Date: Mon, 13 May 2024 03:45:51 +0000 Subject: [PATCH 13/33] add compress --- source/client/src/clientRawBlockWrite.c | 37 ++++++++++++++++++++----- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/source/client/src/clientRawBlockWrite.c b/source/client/src/clientRawBlockWrite.c index 427e238a7b..c5069d46aa 100644 --- a/source/client/src/clientRawBlockWrite.c +++ b/source/client/src/clientRawBlockWrite.c @@ -30,6 +30,11 @@ static tb_uid_t processSuid(tb_uid_t suid, char* db) { return suid + MurmurHash3 static char* buildCreateTableJson(SSchemaWrapper* schemaRow, SSchemaWrapper* schemaTag, char* name, int64_t id, int8_t t, SColCmprWrapper* pColCmprRow) { + int8_t buildDefaultCompress = 0; + if (pColCmprRow->nCols <= 0) { + buildDefaultCompress = 1; + } + char* string = NULL; cJSON* json = cJSON_CreateObject(); if (json == NULL) { @@ -70,13 +75,20 @@ static char* buildCreateTableJson(SSchemaWrapper* schemaRow, SSchemaWrapper* sch cJSON_AddItemToObject(column, "isPrimarykey", isPk); cJSON_AddItemToArray(columns, column); - if (pColCmprRow == NULL || pColCmprRow->nCols <= i) { + if (pColCmprRow == NULL) { continue; } - SColCmpr* pColCmpr = pColCmprRow->pColCmpr + i; - const char* encode = columnEncodeStr(COMPRESS_L1_TYPE_U32(pColCmpr->alg)); - const char* compress = columnCompressStr(COMPRESS_L2_TYPE_U32(pColCmpr->alg)); - const char* level = columnLevelStr(COMPRESS_L2_TYPE_LEVEL_U32(pColCmpr->alg)); + + uint32_t alg = 0; + if (buildDefaultCompress) { + alg = createDefaultColCmprByType(s->type); + } else { + SColCmpr* pColCmpr = pColCmprRow->pColCmpr + i; + alg = pColCmpr->alg; + } + const char* encode = columnEncodeStr(COMPRESS_L1_TYPE_U32(alg)); + const char* compress = columnCompressStr(COMPRESS_L2_TYPE_U32(alg)); + const char* level = columnLevelStr(COMPRESS_L2_TYPE_LEVEL_U32(alg)); cJSON* encodeJson = cJSON_CreateString(encode); cJSON_AddItemToObject(column, "encode", encodeJson); @@ -767,14 +779,25 @@ static int32_t taosCreateStb(TAOS* taos, void* meta, int32_t metaLen) { code = TSDB_CODE_INVALID_PARA; goto end; } + + int8_t createDefaultCompress = 0; + SColCmprWrapper* p = &req.colCmpr; + if (p->nCols == 0) { + createDefaultCompress = 1; + } // build create stable pReq.pColumns = taosArrayInit(req.schemaRow.nCols, sizeof(SFieldWithOptions)); for (int32_t i = 0; i < req.schemaRow.nCols; i++) { SSchema* pSchema = req.schemaRow.pSchema + i; SFieldWithOptions field = {.type = pSchema->type, .flags = pSchema->flags, .bytes = pSchema->bytes}; strcpy(field.name, pSchema->name); - SColCmpr *p = &req.colCmpr.pColCmpr[i]; - field.compress = p->alg; + + if (createDefaultCompress) { + field.compress = createDefaultColCmprByType(pSchema->type); + } else { + SColCmpr* p = &req.colCmpr.pColCmpr[i]; + field.compress = p->alg; + } taosArrayPush(pReq.pColumns, &field); } pReq.pTags = taosArrayInit(req.schemaTag.nCols, sizeof(SField)); From dcbafe637d27217809a9237cd3035807a0417454 Mon Sep 17 00:00:00 2001 From: Minglei Jin Date: Mon, 13 May 2024 16:39:51 +0800 Subject: [PATCH 14/33] fix(cos/oss): use vhost style uri for oss --- source/common/src/cos.c | 5 ++++ source/common/src/tglobal.c | 56 ++++++++++++++++++++----------------- 2 files changed, 36 insertions(+), 25 deletions(-) diff --git a/source/common/src/cos.c b/source/common/src/cos.c index b249d3eff2..26c936c48d 100644 --- a/source/common/src/cos.c +++ b/source/common/src/cos.c @@ -27,6 +27,8 @@ static S3UriStyle uriStyleG = S3UriStylePath; static int retriesG = 5; static int timeoutMsG = 0; +extern int8_t tsS3Oss; + int32_t s3Begin() { S3Status status; const char *hostname = tsS3Hostname; @@ -42,6 +44,9 @@ int32_t s3Begin() { } protocolG = !tsS3Https; + if (tsS3Oss) { + uriStyleG = S3UriStyleVirtualHost; + } return 0; } diff --git a/source/common/src/tglobal.c b/source/common/src/tglobal.c index 9223aa3c7a..8b7901e2a7 100644 --- a/source/common/src/tglobal.c +++ b/source/common/src/tglobal.c @@ -32,22 +32,22 @@ SConfig *tsCfg = NULL; // cluster -char tsFirst[TSDB_EP_LEN] = {0}; -char tsSecond[TSDB_EP_LEN] = {0}; -char tsLocalFqdn[TSDB_FQDN_LEN] = {0}; -char tsLocalEp[TSDB_EP_LEN] = {0}; // Local End Point, hostname:port -char tsVersionName[16] = "community"; -uint16_t tsServerPort = 6030; -int32_t tsVersion = 30000000; -int32_t tsStatusInterval = 1; // second -int32_t tsNumOfSupportVnodes = 256; -char tsEncryptAlgorithm[16] = {0}; -char tsEncryptScope[100] = {0}; -EEncryptAlgor tsiEncryptAlgorithm = 0; -EEncryptScope tsiEncryptScope = 0; -//char tsAuthCode[500] = {0}; -//char tsEncryptKey[17] = {0}; -char tsEncryptKey[17] = {0}; +char tsFirst[TSDB_EP_LEN] = {0}; +char tsSecond[TSDB_EP_LEN] = {0}; +char tsLocalFqdn[TSDB_FQDN_LEN] = {0}; +char tsLocalEp[TSDB_EP_LEN] = {0}; // Local End Point, hostname:port +char tsVersionName[16] = "community"; +uint16_t tsServerPort = 6030; +int32_t tsVersion = 30000000; +int32_t tsStatusInterval = 1; // second +int32_t tsNumOfSupportVnodes = 256; +char tsEncryptAlgorithm[16] = {0}; +char tsEncryptScope[100] = {0}; +EEncryptAlgor tsiEncryptAlgorithm = 0; +EEncryptScope tsiEncryptScope = 0; +// char tsAuthCode[500] = {0}; +// char tsEncryptKey[17] = {0}; +char tsEncryptKey[17] = {0}; // common int32_t tsMaxShellConns = 50000; @@ -296,6 +296,7 @@ char tsS3AccessKeySecret[TSDB_FQDN_LEN] = ""; char tsS3BucketName[TSDB_FQDN_LEN] = ""; char tsS3AppId[TSDB_FQDN_LEN] = ""; int8_t tsS3Enabled = false; +int8_t tsS3Oss = false; int8_t tsS3StreamEnabled = false; int8_t tsS3Https = true; @@ -310,7 +311,7 @@ bool tsExperimental = true; int32_t tsMaxTsmaNum = 3; int32_t tsMaxTsmaCalcDelay = 600; -int64_t tsmaDataDeleteMark = 1000 * 60 * 60 * 24; // in ms, default to 1d +int64_t tsmaDataDeleteMark = 1000 * 60 * 60 * 24; // in ms, default to 1d #ifndef _STORAGE int32_t taosSetTfsCfg(SConfig *pCfg) { @@ -366,6 +367,10 @@ int32_t taosSetS3Cfg(SConfig *pCfg) { tstrncpy(tsS3AppId, appid + 1, TSDB_FQDN_LEN); } } + char *oss = strstr(tsS3Endpoint, "aliyuncs."); + if (oss) { + tsS3Oss = true; + } if (tsS3BucketName[0] != '<') { #if defined(USE_COS) || defined(USE_S3) #ifdef TD_ENTERPRISE @@ -563,11 +568,12 @@ static int32_t taosAddClientCfg(SConfig *pCfg) { if (cfgAddBool(pCfg, "monitor", tsEnableMonitor, CFG_SCOPE_BOTH, CFG_DYN_BOTH) != 0) return -1; if (cfgAddInt32(pCfg, "monitorInterval", tsMonitorInterval, 1, 200000, CFG_SCOPE_BOTH, CFG_DYN_NONE) != 0) return -1; - if (cfgAddBool(pCfg, "multiResultFunctionStarReturnTags", tsMultiResultFunctionStarReturnTags, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT) != 0) return -1; + if (cfgAddBool(pCfg, "multiResultFunctionStarReturnTags", tsMultiResultFunctionStarReturnTags, CFG_SCOPE_CLIENT, + CFG_DYN_CLIENT) != 0) + return -1; if (cfgAddInt32(pCfg, "countAlwaysReturnValue", tsCountAlwaysReturnValue, 0, 1, CFG_SCOPE_BOTH, CFG_DYN_CLIENT) != 0) return -1; - if (cfgAddInt32(pCfg, "maxTsmaCalcDelay", tsMaxTsmaCalcDelay, 600, 86400, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT) != - 0) + if (cfgAddInt32(pCfg, "maxTsmaCalcDelay", tsMaxTsmaCalcDelay, 600, 86400, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT) != 0) return -1; if (cfgAddInt32(pCfg, "tsmaDataDeleteMark", tsmaDataDeleteMark, 60 * 60 * 1000, INT64_MAX, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT) != 0) @@ -618,11 +624,12 @@ static int32_t taosAddServerCfg(SConfig *pCfg) { tsNumOfSupportVnodes = tsNumOfCores * 2; tsNumOfSupportVnodes = TMAX(tsNumOfSupportVnodes, 2); - if (cfgAddInt32(pCfg, "supportVnodes", tsNumOfSupportVnodes, 0, 4096, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER) != 0) return -1; + if (cfgAddInt32(pCfg, "supportVnodes", tsNumOfSupportVnodes, 0, 4096, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER) != 0) + return -1; if (cfgAddString(pCfg, "encryptAlgorithm", tsEncryptAlgorithm, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; if (cfgAddString(pCfg, "encryptScope", tsEncryptScope, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; - //if (cfgAddString(pCfg, "authCode", tsAuthCode, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; + // if (cfgAddString(pCfg, "authCode", tsAuthCode, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; if (cfgAddInt32(pCfg, "statusInterval", tsStatusInterval, 1, 30, CFG_SCOPE_SERVER, CFG_DYN_NONE) != 0) return -1; if (cfgAddInt32(pCfg, "minSlidingTime", tsMinSlidingTime, 1, 1000000, CFG_SCOPE_CLIENT, CFG_DYN_CLIENT) != 0) @@ -749,8 +756,7 @@ static int32_t taosAddServerCfg(SConfig *pCfg) { if (cfgAddInt32(pCfg, "tmqMaxTopicNum", tmqMaxTopicNum, 1, 10000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER) != 0) return -1; - if (cfgAddInt32(pCfg, "tmqRowSize", tmqRowSize, 1, 1000000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER) != 0) - return -1; + if (cfgAddInt32(pCfg, "tmqRowSize", tmqRowSize, 1, 1000000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER) != 0) return -1; if (cfgAddInt32(pCfg, "maxTsmaNum", tsMaxTsmaNum, 0, 3, CFG_SCOPE_SERVER, CFG_DYN_SERVER) != 0) return -1; if (cfgAddInt32(pCfg, "transPullupInterval", tsTransPullupInterval, 1, 10000, CFG_SCOPE_SERVER, CFG_DYN_ENT_SERVER) != @@ -1181,7 +1187,7 @@ static int32_t taosSetServerCfg(SConfig *pCfg) { tsQueryBufferSize = cfgGetItem(pCfg, "queryBufferSize")->i32; tstrncpy(tsEncryptAlgorithm, cfgGetItem(pCfg, "encryptAlgorithm")->str, 16); tstrncpy(tsEncryptScope, cfgGetItem(pCfg, "encryptScope")->str, 100); - //tstrncpy(tsAuthCode, cfgGetItem(pCfg, "authCode")->str, 100); + // tstrncpy(tsAuthCode, cfgGetItem(pCfg, "authCode")->str, 100); tsNumOfRpcThreads = cfgGetItem(pCfg, "numOfRpcThreads")->i32; tsNumOfRpcSessions = cfgGetItem(pCfg, "numOfRpcSessions")->i32; From 8ab24c71d012cc5547ba1098b3a350f3d4f94b5a Mon Sep 17 00:00:00 2001 From: kailixu Date: Mon, 13 May 2024 17:14:29 +0800 Subject: [PATCH 15/33] fix: show tags from undefined table --- source/libs/parser/src/parAstParser.c | 4 +++ source/libs/parser/src/parTranslater.c | 28 +++++++++++++++++++- tests/system-test/0-others/show_tag_index.py | 6 +++++ 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/source/libs/parser/src/parAstParser.c b/source/libs/parser/src/parAstParser.c index 3da6ac668c..ef9252e337 100644 --- a/source/libs/parser/src/parAstParser.c +++ b/source/libs/parser/src/parAstParser.c @@ -534,6 +534,10 @@ static int32_t collectMetaKeyFromShowTables(SCollectMetaKeyCxt* pCxt, SShowStmt* static int32_t collectMetaKeyFromShowTags(SCollectMetaKeyCxt* pCxt, SShowStmt* pStmt) { int32_t code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, TSDB_INFORMATION_SCHEMA_DB, TSDB_INS_TABLE_TAGS, pCxt->pMetaCache); + if (TSDB_CODE_SUCCESS == code) { + code = reserveTableMetaInCache(pCxt->pParseCxt->acctId, ((SValueNode*)pStmt->pDbName)->literal, + ((SValueNode*)pStmt->pTbName)->literal, pCxt->pMetaCache); + } if (TSDB_CODE_SUCCESS == code) { code = reserveDbVgInfoInCache(pCxt->pParseCxt->acctId, ((SValueNode*)pStmt->pDbName)->literal, pCxt->pMetaCache); } diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c index b26f837423..68e207e64e 100644 --- a/source/libs/parser/src/parTranslater.c +++ b/source/libs/parser/src/parTranslater.c @@ -11867,6 +11867,30 @@ static int32_t rewriteShowVgroups(STranslateContext* pCxt, SQuery* pQuery) { return code; } +static int32_t checkShowTags(STranslateContext* pCxt, const SShowStmt* pShow) { + int32_t code = 0; + SName name; + STableMeta* pTableMeta = NULL; + code = getTargetMeta(pCxt, + toName(pCxt->pParseCxt->acctId, ((SValueNode*)pShow->pDbName)->literal, + ((SValueNode*)pShow->pTbName)->literal, &name), + &pTableMeta, true); + taosMemoryFreeClear(pTableMeta); + if (TSDB_CODE_SUCCESS != code) { + return generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_GET_META_ERROR, tstrerror(code)); + } + + return code; +} + +static int32_t rewriteShowTags(STranslateContext* pCxt, SQuery* pQuery) { + int32_t code = checkShowTags(pCxt, (SShowStmt*)pQuery->pRoot); + if (TSDB_CODE_SUCCESS == code) { + code = rewriteShow(pCxt, pQuery); + } + return code; +} + static SNode* createTagsFunction() { SFunctionNode* pFunc = (SFunctionNode*)nodesMakeNode(QUERY_NODE_FUNCTION); if (NULL == pFunc) { @@ -13170,7 +13194,6 @@ static int32_t rewriteQuery(STranslateContext* pCxt, SQuery* pQuery) { case QUERY_NODE_SHOW_APPS_STMT: case QUERY_NODE_SHOW_CONSUMERS_STMT: case QUERY_NODE_SHOW_SUBSCRIPTIONS_STMT: - case QUERY_NODE_SHOW_TAGS_STMT: case QUERY_NODE_SHOW_USER_PRIVILEGES_STMT: case QUERY_NODE_SHOW_VIEWS_STMT: case QUERY_NODE_SHOW_GRANTS_FULL_STMT: @@ -13181,6 +13204,9 @@ static int32_t rewriteQuery(STranslateContext* pCxt, SQuery* pQuery) { case QUERY_NODE_SHOW_TSMAS_STMT: code = rewriteShow(pCxt, pQuery); break; + case QUERY_NODE_SHOW_TAGS_STMT: + code = rewriteShowTags(pCxt, pQuery); + break; case QUERY_NODE_SHOW_VGROUPS_STMT: code = rewriteShowVgroups(pCxt, pQuery); break; diff --git a/tests/system-test/0-others/show_tag_index.py b/tests/system-test/0-others/show_tag_index.py index c79880ba35..3f1b598589 100644 --- a/tests/system-test/0-others/show_tag_index.py +++ b/tests/system-test/0-others/show_tag_index.py @@ -113,6 +113,9 @@ class TDTestCase: tdSql.error(f'show tags from `db`.`stb` from db') tdSql.error(f'show tags from db.ctb1 from db') tdSql.error(f'show tags from `db`.`ctb1` from db') + tdSql.error(f'show tags from tb_undef from db') + tdSql.error(f'show tags from db.tb_undef') + tdSql.error(f'show tags from tb_undef') # show table tags tdSql.query(f'show table tags from stb') @@ -145,6 +148,9 @@ class TDTestCase: tdSql.error(f'show table tags from `db`.`stb` from db') tdSql.error(f'show table tags from db.ctb1 from db') tdSql.error(f'show table tags from `db`.`ctb1` from db') + tdSql.error(f'show table tags from tb_undef from db') + tdSql.error(f'show table tags from db.tb_undef') + tdSql.error(f'show table tags from tb_undef') # show indexes tdSql.execute(f'create index idx1 on stb (t1)') From 0f0d9886a229bd99f9ca15d081183484f4485466 Mon Sep 17 00:00:00 2001 From: charles Date: Mon, 13 May 2024 17:52:59 +0800 Subject: [PATCH 16/33] add test case for task TD-28586 by charles --- .../insert/test_column_tag_boundary.py | 181 ++++++++++++++++++ tests/parallel_test/cases.task | 1 + 2 files changed, 182 insertions(+) create mode 100644 tests/army/community/insert/test_column_tag_boundary.py diff --git a/tests/army/community/insert/test_column_tag_boundary.py b/tests/army/community/insert/test_column_tag_boundary.py new file mode 100644 index 0000000000..4c04fd3f9b --- /dev/null +++ b/tests/army/community/insert/test_column_tag_boundary.py @@ -0,0 +1,181 @@ +from frame.log import * +from frame.cases import * +from frame.sql import * +from frame.caseBase import * +from frame import * +from frame.eos import * +import random +import string + +class TDTestCase(TBase): + """Add test case to test column and tag boundary for task TD-28586 + """ + def init(self, conn, logSql, replicaVar=1): + self.replicaVar = int(replicaVar) + tdLog.debug("start to execute %s" % __file__) + tdSql.init(conn.cursor()) + # define the max properties of column and tag + self.super_table_max_column_num = 4096 + self.max_tag_num = 128 + self.max_tag_length = 16382 + self.max_column_length = 65517 + self.child_table_num = 1 + self.insert_round_num = 700 + self.row_num_per_round = 15 + + def prepare_data(self): + # database + tdSql.execute("create database db;") + tdSql.execute("use db;") + + def test_binary_boundary(self): + # create tables + tdSql.execute(f"create table st_binary (ts timestamp, c1 binary({self.max_column_length})) tags (t1 binary({self.max_tag_length}));") + for i in range(self.child_table_num): + # create child table with max column and tag length + tag = ''.join(random.sample(string.ascii_lowercase, 1)) * self.max_tag_length + tdSql.execute(f"create table ct_binary{i+1} using st_binary tags('{tag}');") + # insert data + for j in range(self.insert_round_num): + sql = "insert into ct_binary%s values" % (i+1) + for k in range(self.row_num_per_round): + sql += "(now+%ss, '%s')," % (str(j * 10 + k + 1), 'a' * self.max_column_length) + tdSql.execute(sql) + tdLog.info(f"Insert {self.row_num_per_round} rows data into ct_binary{i+1} {j+1} times successfully") + tdSql.execute("flush database db;") + # check the data + for i in range(self.child_table_num): + tdSql.query(f"select * from ct_binary{i+1};") + tdSql.checkRows(10500) + row_num = random.randint(0, 9999) + tdSql.checkData(row_num, 1, 'a' * self.max_column_length) + tdSql.query(f"show tags from ct_binary{i+1};") + tdSql.checkData(0, 5, tag) + + def test_varchar_boundary(self): + # create tables + tdSql.execute(f"create table st_varchar (ts timestamp, c1 varchar({self.max_column_length})) tags (t1 varchar({self.max_tag_length}));") + for i in range(self.child_table_num): + # create child table with max column and tag length + tag = ''.join(random.sample(string.ascii_lowercase, 1)) * self.max_tag_length + tdSql.execute(f"create table ct_varchar{i+1} using st_varchar tags('{tag}');") + # insert data + for j in range(self.insert_round_num): + sql = "insert into ct_varchar%s values" % (i+1) + for k in range(self.row_num_per_round): + sql += "(now+%ss, '%s')," % (str(j * 10 + k + 1), 'b' * self.max_column_length) + tdSql.execute(sql) + tdLog.info(f"Insert {self.row_num_per_round} rows data into ct_varchar{i+1} {j+1} times successfully") + tdSql.execute("flush database db;") + # check the data + for i in range(self.child_table_num): + tdSql.query(f"select * from ct_varchar{i+1};") + tdSql.checkRows(10500) + row_num = random.randint(0, 9999) + tdSql.checkData(row_num, 1, 'b' * self.max_column_length) + tdSql.query(f"show tags from ct_varchar{i+1};") + tdSql.checkData(0, 5, tag) + + def gen_chinese_string(self, length): + start = 0x4e00 + end = 0x9fa5 + chinese_string = '' + for _ in range(length): + chinese_string += chr(random.randint(start, end)) + return chinese_string + + def test_nchar_boundary(self): + max_nchar_column_length = self.max_column_length // 4 + max_nchar_tag_length = self.max_tag_length // 4 + # create tables + tdSql.execute(f"create table st_nchar (ts timestamp, c1 nchar({max_nchar_column_length})) tags (t1 nchar({max_nchar_tag_length}));") + for i in range(self.child_table_num): + # create child table with max column and tag length + tag = self.gen_chinese_string(max_nchar_tag_length) + column = self.gen_chinese_string(max_nchar_column_length) + tdSql.execute(f"create table ct_nchar{i+1} using st_nchar tags('{tag}');") + # insert data + for j in range(self.insert_round_num): + sql = "insert into ct_nchar%s values" % (i+1) + for k in range(self.row_num_per_round): + sql += "(now+%ss, '%s')," % (str(j * 10 + k + 1), column) + tdSql.execute(sql) + tdLog.info(f"Insert {self.row_num_per_round} rows data into ct_nchar{i+1} {j+1} times successfully") + tdSql.execute("flush database db;") + # check the data + for i in range(self.child_table_num): + tdSql.query(f"select * from ct_nchar{i+1};") + tdSql.checkRows(10500) + row_num = random.randint(0, 9999) + tdSql.checkData(row_num, 1, column) + tdSql.query(f"show tags from ct_nchar{i+1};") + tdSql.checkData(0, 5, tag) + + def test_varbinary_boundary(self): + row_num_per_round = 8 + # create tables + tdSql.execute(f"create table st_varbinary (ts timestamp, c1 varbinary({self.max_column_length})) tags (t1 varbinary({self.max_tag_length}));") + for i in range(self.child_table_num): + # create child table with max column and tag length + tag = (''.join(random.sample(string.ascii_lowercase, 1)) * self.max_tag_length).encode().hex() + column = (''.join(random.sample(string.ascii_lowercase, 1)) * self.max_column_length).encode().hex() + tdSql.execute("create table ct_varbinary%s using st_varbinary tags('%s');" % (str(i+1), '\\x' + tag)) + # insert data + for j in range(self.insert_round_num): + sql = "insert into ct_varbinary%s values" % (i+1) + for k in range(row_num_per_round): + sql += "(now+%ss, '%s')," % (str(j * 10 + k + 1), '\\x' + column) + tdSql.execute(sql) + tdLog.info(f"Insert {row_num_per_round} rows data into ct_varbinary{i+1} {j+1} times successfully") + tdSql.execute("flush database db;") + # check the data + for i in range(self.child_table_num): + tdSql.query(f"select * from ct_varbinary{i+1};") + tdSql.checkRows(5600) + row_num = random.randint(0, 5599) + tdSql.checkData(row_num, 1, bytes.fromhex(column)) + tdSql.query(f"show tags from ct_varbinary{i+1};") + tdSql.checkData(0, 5, '\\x' + tag.upper()) + + def test_json_tag_boundary(self): + row_num_per_round = 8 + max_json_tag_length = 4095 + max_json_tag_key_length = 256 + # create tables + tdSql.execute(f"create table st_json_tag (ts timestamp, c1 varbinary({self.max_column_length})) tags (t1 json);") + for i in range(self.child_table_num): + # create child table with max column and tag length + tag_key = ''.join(random.sample(string.ascii_lowercase, 1)) * max_json_tag_key_length + tag_value = ''.join(random.sample(string.ascii_lowercase, 1)) * (max_json_tag_length - max_json_tag_key_length - 7) + column = (''.join(random.sample(string.ascii_lowercase, 1)) * self.max_column_length).encode().hex() + tdSql.execute("create table ct_json_tag%s using st_json_tag tags('%s');" % (str(i+1), f'{{"{tag_key}":"{tag_value}"}}')) + # insert data + for j in range(self.insert_round_num): + sql = "insert into ct_json_tag%s values" % (i+1) + for k in range(row_num_per_round): + sql += "(now+%ss, '%s')," % (str(j * 10 + k + 1), '\\x' + column) + tdSql.execute(sql) + tdLog.info(f"Insert {row_num_per_round} rows data into ct_json_tag{i+1} {j+1} times successfully") + tdSql.execute("flush database db;") + # check the data + for i in range(self.child_table_num): + tdSql.query(f"select * from ct_json_tag{i+1} where t1->'{tag_key}' = '{tag_value}';") + tdSql.checkRows(5600) + row_num = random.randint(0, 5599) + tdSql.checkData(row_num, 1, bytes.fromhex(column)) + + def run(self): + self.prepare_data() + self.test_binary_boundary() + self.test_varchar_boundary() + self.test_nchar_boundary() + self.test_varbinary_boundary() + self.test_json_tag_boundary() + + def stop(self): + tdSql.execute("drop database db;") + tdSql.close() + tdLog.success("%s successfully executed" % __file__) + +tdCases.addWindows(__file__, TDTestCase()) +tdCases.addLinux(__file__, TDTestCase()) diff --git a/tests/parallel_test/cases.task b/tests/parallel_test/cases.task index e3e1291c47..816288b5e9 100644 --- a/tests/parallel_test/cases.task +++ b/tests/parallel_test/cases.task @@ -16,6 +16,7 @@ ,,y,army,./pytest.sh python3 ./test.py -f community/query/function/test_func_elapsed.py ,,y,army,./pytest.sh python3 ./test.py -f community/query/test_join.py ,,y,army,./pytest.sh python3 ./test.py -f community/query/test_compare.py +,,y,army,./pytest.sh python3 ./test.py -f community/insert/test_column_tag_boundary.py ,,y,army,./pytest.sh python3 ./test.py -f community/query/fill/fill_desc.py -N 3 -L 3 -D 2 ,,y,army,./pytest.sh python3 ./test.py -f community/cluster/incSnapshot.py -N 3 ,,y,army,./pytest.sh python3 ./test.py -f community/query/query_basic.py -N 3 From 694680600eca9b55f6fdd97f4177f47fb58f4ca2 Mon Sep 17 00:00:00 2001 From: Shungang Li Date: Sat, 11 May 2024 15:28:11 +0800 Subject: [PATCH 17/33] fix: tsdbCache vartype of zero size --- source/dnode/vnode/src/tsdb/tsdbCache.c | 79 +++++++++++++------------ 1 file changed, 42 insertions(+), 37 deletions(-) diff --git a/source/dnode/vnode/src/tsdb/tsdbCache.c b/source/dnode/vnode/src/tsdb/tsdbCache.c index 6f26e3a63f..7dd8535a5e 100644 --- a/source/dnode/vnode/src/tsdb/tsdbCache.c +++ b/source/dnode/vnode/src/tsdb/tsdbCache.c @@ -359,7 +359,10 @@ static int32_t tsdbCacheDeserializeV0(char const *value, SLastCol *pLastCol) { if (IS_VAR_DATA_TYPE(pLastCol->colVal.value.type)) { pLastCol->colVal.value.nData = pLastColV0->colVal.value.nData; - pLastCol->colVal.value.pData = (uint8_t *)(&pLastColV0[1]); + pLastCol->colVal.value.pData = NULL; + if (pLastCol->colVal.value.nData > 0) { + pLastCol->colVal.value.pData = (uint8_t *)(&pLastColV0[1]); + } return sizeof(SLastColV0) + pLastColV0->colVal.value.nData; } else { pLastCol->colVal.value.val = pLastColV0->colVal.value.val; @@ -401,8 +404,11 @@ static SLastCol *tsdbCacheDeserialize(char const *value, size_t size) { offset += sizeof(SValue); if (IS_VAR_DATA_TYPE(pLastCol->rowKey.pks[i].type)) { - pLastCol->rowKey.pks[i].pData = (uint8_t *)value + offset; - offset += pLastCol->rowKey.pks[i].nData; + pLastCol->rowKey.pks[i].pData = NULL; + if (pLastCol->rowKey.pks[i].nData > 0) { + pLastCol->rowKey.pks[i].pData = (uint8_t *)value + offset; + offset += pLastCol->rowKey.pks[i].nData; + } } } @@ -940,10 +946,37 @@ typedef struct { SLastKey key; } SIdxKey; -static void tsdbCacheUpdateLastCol(SLastCol *pLastCol, SRowKey *pRowKey, SColVal *pColVal) { - uint8_t *pVal = NULL; +static int32_t tsdbCacheUpdateValue(SValue *pOld, SValue *pNew) { + uint8_t *pFree = NULL; int nData = 0; + if (IS_VAR_DATA_TYPE(pOld->type)) { + pFree = pOld->pData; + nData = pOld->nData; + } + + *pOld = *pNew; + if (IS_VAR_DATA_TYPE(pNew->type)) { + if (nData < pNew->nData) { + pOld->pData = taosMemoryCalloc(1, pNew->nData); + } else { + pOld->pData = pFree; + pFree = NULL; + } + + if (pNew->nData) { + memcpy(pOld->pData, pNew->pData, pNew->nData); + } else { + pFree = pOld->pData; + pOld->pData = NULL; + } + } + + taosMemoryFreeClear(pFree); + return 0; +} + +static void tsdbCacheUpdateLastCol(SLastCol *pLastCol, SRowKey *pRowKey, SColVal *pColVal) { // update rowkey pLastCol->rowKey.ts = pRowKey->ts; pLastCol->rowKey.numOfPKs = pRowKey->numOfPKs; @@ -951,41 +984,13 @@ static void tsdbCacheUpdateLastCol(SLastCol *pLastCol, SRowKey *pRowKey, SColVal SValue *pPKValue = &pLastCol->rowKey.pks[i]; SValue *pNewPKValue = &pRowKey->pks[i]; - if (IS_VAR_DATA_TYPE(pPKValue->type)) { - pVal = pPKValue->pData; - nData = pPKValue->nData; - } - *pPKValue = *pNewPKValue; - if (IS_VAR_DATA_TYPE(pPKValue->type)) { - if (nData < pPKValue->nData) { - taosMemoryFree(pVal); - pPKValue->pData = taosMemoryCalloc(1, pNewPKValue->nData); - } else { - pPKValue->pData = pVal; - } - if (pNewPKValue->nData) { - memcpy(pPKValue->pData, pNewPKValue->pData, pNewPKValue->nData); - } - } + (void)tsdbCacheUpdateValue(pPKValue, pNewPKValue); } // update colval - if (IS_VAR_DATA_TYPE(pColVal->value.type)) { - nData = pLastCol->colVal.value.nData; - pVal = pLastCol->colVal.value.pData; - } - pLastCol->colVal = *pColVal; - if (IS_VAR_DATA_TYPE(pColVal->value.type)) { - if (nData < pColVal->value.nData) { - taosMemoryFree(pVal); - pLastCol->colVal.value.pData = taosMemoryCalloc(1, pColVal->value.nData); - } else { - pLastCol->colVal.value.pData = pVal; - } - if (pColVal->value.nData) { - memcpy(pLastCol->colVal.value.pData, pColVal->value.pData, pColVal->value.nData); - } - } + pLastCol->colVal.cid = pColVal->cid; + pLastCol->colVal.flag = pColVal->flag; + (void)tsdbCacheUpdateValue(&pLastCol->colVal.value, &pColVal->value); if (!pLastCol->dirty) { pLastCol->dirty = 1; From 87f52c88d91ff79913e8310075b641b15cd26c13 Mon Sep 17 00:00:00 2001 From: Shungang Li Date: Tue, 14 May 2024 10:45:13 +0800 Subject: [PATCH 18/33] fix: race condition in dumpConfToDataBlock --- source/common/src/tmisce.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/common/src/tmisce.c b/source/common/src/tmisce.c index 0a9e8f434b..d2b52b201e 100644 --- a/source/common/src/tmisce.c +++ b/source/common/src/tmisce.c @@ -228,6 +228,8 @@ int32_t dumpConfToDataBlock(SSDataBlock* pBlock, int32_t startCol) { blockDataEnsureCapacity(pBlock, cfgGetSize(pConf)); SConfigIter* pIter = cfgCreateIter(pConf); + cfgLock(pConf); + while ((pItem = cfgNextIter(pIter)) != NULL) { col = startCol; @@ -253,6 +255,8 @@ int32_t dumpConfToDataBlock(SSDataBlock* pBlock, int32_t startCol) { numOfRows++; } + cfgUnLock(pConf); + pBlock->info.rows = numOfRows; cfgDestroyIter(pIter); From b6eec20dfbc851193e1fe883da1cc1fde38b2c05 Mon Sep 17 00:00:00 2001 From: Minglei Jin Date: Mon, 13 May 2024 19:10:55 +0800 Subject: [PATCH 19/33] fix(s3/grant): checking grant when doing migrate --- source/common/src/tglobal.c | 2 ++ source/dnode/mgmt/node_mgmt/CMakeLists.txt | 5 ----- source/dnode/mgmt/node_mgmt/src/dmEnv.c | 6 ------ source/dnode/vnode/src/tsdb/tsdbRetention.c | 10 ++++++++++ 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/source/common/src/tglobal.c b/source/common/src/tglobal.c index 8b7901e2a7..f4999ed368 100644 --- a/source/common/src/tglobal.c +++ b/source/common/src/tglobal.c @@ -296,6 +296,7 @@ char tsS3AccessKeySecret[TSDB_FQDN_LEN] = ""; char tsS3BucketName[TSDB_FQDN_LEN] = ""; char tsS3AppId[TSDB_FQDN_LEN] = ""; int8_t tsS3Enabled = false; +int8_t tsS3EnabledCfg = false; int8_t tsS3Oss = false; int8_t tsS3StreamEnabled = false; @@ -375,6 +376,7 @@ int32_t taosSetS3Cfg(SConfig *pCfg) { #if defined(USE_COS) || defined(USE_S3) #ifdef TD_ENTERPRISE /*if (tsDiskCfgNum > 1) */ tsS3Enabled = true; + tsS3EnabledCfg = true; #endif tsS3StreamEnabled = true; #endif diff --git a/source/dnode/mgmt/node_mgmt/CMakeLists.txt b/source/dnode/mgmt/node_mgmt/CMakeLists.txt index 4f362f5a74..82b9384d66 100644 --- a/source/dnode/mgmt/node_mgmt/CMakeLists.txt +++ b/source/dnode/mgmt/node_mgmt/CMakeLists.txt @@ -16,11 +16,6 @@ IF (DEFINED GRANT_CFG_INCLUDE_DIR) add_definitions(-DGRANTS_CFG) ENDIF() -IF (TD_GRANT) - ADD_DEFINITIONS(-D_GRANT) - TARGET_LINK_LIBRARIES(dnode grant) -ENDIF () - target_include_directories( dnode PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/inc" diff --git a/source/dnode/mgmt/node_mgmt/src/dmEnv.c b/source/dnode/mgmt/node_mgmt/src/dmEnv.c index 4619214f40..8e760c28be 100644 --- a/source/dnode/mgmt/node_mgmt/src/dmEnv.c +++ b/source/dnode/mgmt/node_mgmt/src/dmEnv.c @@ -166,12 +166,6 @@ int32_t dmInit() { if (dmInitAudit() != 0) return -1; if (dmInitDnode(dmInstance()) != 0) return -1; #if defined(USE_S3) - int32_t expired = grantCheck(TSDB_GRANT_OBJECT_STORAGE); - if (expired && tsS3Enabled) { - dWarn("s3 grant expired: %d", expired); - tsS3Enabled = false; - } - if (s3Begin() != 0) return -1; #endif diff --git a/source/dnode/vnode/src/tsdb/tsdbRetention.c b/source/dnode/vnode/src/tsdb/tsdbRetention.c index 5a138d2bed..f4344296b4 100644 --- a/source/dnode/vnode/src/tsdb/tsdbRetention.c +++ b/source/dnode/vnode/src/tsdb/tsdbRetention.c @@ -757,6 +757,16 @@ _exit: int32_t tsdbS3Migrate(STsdb *tsdb, int64_t now, int32_t sync) { int32_t code = 0; + extern int8_t tsS3EnabledCfg; + + int32_t expired = grantCheck(TSDB_GRANT_OBJECT_STORAGE); + if (expired && tsS3Enabled) { + tsdbWarn("s3 grant expired: %d", expired); + tsS3Enabled = false; + } else if (!expired && tsS3EnabledCfg) { + tsS3Enabled = true; + } + if (!tsS3Enabled) { return code; } From 2e919ff9d045c3eef0e2b126060c6b886368a258 Mon Sep 17 00:00:00 2001 From: Minglei Jin Date: Tue, 14 May 2024 11:27:43 +0800 Subject: [PATCH 20/33] fix(cos/checks3): failed early if not enabled --- source/common/src/cos.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/common/src/cos.c b/source/common/src/cos.c index 26c936c48d..6c46f4ff42 100644 --- a/source/common/src/cos.c +++ b/source/common/src/cos.c @@ -63,6 +63,11 @@ static int32_t s3ListBucket(char const *bucketname); int32_t s3CheckCfg() { int32_t code = 0; + if (!tsS3Enabled) { + fprintf(stderr, "s3 not configured.\n"); + goto _exit; + } + code = s3Begin(); if (code != 0) { fprintf(stderr, "failed to initialize s3.\n"); From 4abe06627cb2476244cca3c9c9b4d8c1e2ab4e18 Mon Sep 17 00:00:00 2001 From: kailixu Date: Tue, 14 May 2024 12:25:25 +0800 Subject: [PATCH 21/33] fix: error msg of show table tags from view --- source/libs/parser/src/parTranslater.c | 2 +- tests/system-test/0-others/show_tag_index.py | 22 ++++++++++++++------ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c index 68e207e64e..b92674fc26 100644 --- a/source/libs/parser/src/parTranslater.c +++ b/source/libs/parser/src/parTranslater.c @@ -4338,7 +4338,7 @@ int32_t translateTable(STranslateContext* pCxt, SNode** pTable, SNode* pJoinPare return generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_GET_META_ERROR, tstrerror(code)); } #ifdef TD_ENTERPRISE - if (TSDB_VIEW_TABLE == pRealTable->pMeta->tableType) { + if (TSDB_VIEW_TABLE == pRealTable->pMeta->tableType && !pCurrSmt->tagScan) { return translateView(pCxt, pTable, &name); } translateAudit(pCxt, pRealTable, &name); diff --git a/tests/system-test/0-others/show_tag_index.py b/tests/system-test/0-others/show_tag_index.py index 3f1b598589..1a7e6dca2c 100644 --- a/tests/system-test/0-others/show_tag_index.py +++ b/tests/system-test/0-others/show_tag_index.py @@ -78,6 +78,11 @@ class TDTestCase: tdSql.execute(f'create table stb (ts timestamp, c0 int) tags (t0 int, t1 int)') tdSql.execute(f'create table ctb1 using stb tags (1, 1)') tdSql.execute(f'create table ctb2 using stb tags (2, 2)') + tdSql.execute(f'create table ntb (ts timestamp, c0 int)') + tdSql.execute(f'create view vtb as select * from stb') + tdSql.execute(f'create view vtb1 as select * from ctb1') + tdSql.execute(f'create view vtb2 as select * from ctb2') + tdSql.execute(f'create view vtbn as select * from ntb') tdSql.execute(f'insert into ctb1 values (now, 1)') tdSql.execute(f'insert into ctb2 values (now, 2)') @@ -113,9 +118,9 @@ class TDTestCase: tdSql.error(f'show tags from `db`.`stb` from db') tdSql.error(f'show tags from db.ctb1 from db') tdSql.error(f'show tags from `db`.`ctb1` from db') - tdSql.error(f'show tags from tb_undef from db') - tdSql.error(f'show tags from db.tb_undef') - tdSql.error(f'show tags from tb_undef') + tdSql.error(f'show tags from tb_undef from db', expectErrInfo='Fail to get table info, error: Table does not exist') + tdSql.error(f'show tags from db.tb_undef', expectErrInfo='Fail to get table info, error: Table does not exist') + tdSql.error(f'show tags from tb_undef', expectErrInfo='Fail to get table info, error: Table does not exist') # show table tags tdSql.query(f'show table tags from stb') @@ -148,9 +153,14 @@ class TDTestCase: tdSql.error(f'show table tags from `db`.`stb` from db') tdSql.error(f'show table tags from db.ctb1 from db') tdSql.error(f'show table tags from `db`.`ctb1` from db') - tdSql.error(f'show table tags from tb_undef from db') - tdSql.error(f'show table tags from db.tb_undef') - tdSql.error(f'show table tags from tb_undef') + tdSql.error(f'show table tags from tb_undef from db', expectErrInfo='Fail to get table info, error: Table does not exist') + tdSql.error(f'show table tags from db.tb_undef', expectErrInfo='Fail to get table info, error: Table does not exist') + tdSql.error(f'show table tags from tb_undef', expectErrInfo='Fail to get table info, error: Table does not exist') + tdSql.error(f'show table tags from ntb', expectErrInfo='Tags can only applied to super table and child table') + tdSql.error(f'show table tags from vtb', expectErrInfo='Tags can only applied to super table and child table') + tdSql.error(f'show table tags from vtb1', expectErrInfo='Tags can only applied to super table and child table') + tdSql.error(f'show table tags from vtb2', expectErrInfo='Tags can only applied to super table and child table') + tdSql.error(f'show table tags from vtbn', expectErrInfo='Tags can only applied to super table and child table') # show indexes tdSql.execute(f'create index idx1 on stb (t1)') From ba8d44e49c41d83caae1e8769b2809647c56d591 Mon Sep 17 00:00:00 2001 From: kailixu Date: Tue, 14 May 2024 12:49:09 +0800 Subject: [PATCH 22/33] fix: error msg of show tags from ntb/view --- source/libs/parser/src/parTranslater.c | 11 +++++++++-- tests/system-test/0-others/show_tag_index.py | 5 +++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c index b92674fc26..2745f7c15b 100644 --- a/source/libs/parser/src/parTranslater.c +++ b/source/libs/parser/src/parTranslater.c @@ -11875,11 +11875,18 @@ static int32_t checkShowTags(STranslateContext* pCxt, const SShowStmt* pShow) { toName(pCxt->pParseCxt->acctId, ((SValueNode*)pShow->pDbName)->literal, ((SValueNode*)pShow->pTbName)->literal, &name), &pTableMeta, true); - taosMemoryFreeClear(pTableMeta); if (TSDB_CODE_SUCCESS != code) { - return generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_GET_META_ERROR, tstrerror(code)); + code = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_GET_META_ERROR, tstrerror(code)); + goto _exit; + } + if (TSDB_SUPER_TABLE != pTableMeta->tableType && TSDB_CHILD_TABLE != pTableMeta->tableType) { + code = generateSyntaxErrMsg(&pCxt->msgBuf, TSDB_CODE_PAR_INVALID_TAGS_PC, + "The _TAGS pseudo column can only be used for child table and super table queries"); + goto _exit; } +_exit: + taosMemoryFreeClear(pTableMeta); return code; } diff --git a/tests/system-test/0-others/show_tag_index.py b/tests/system-test/0-others/show_tag_index.py index 1a7e6dca2c..d84d4193c4 100644 --- a/tests/system-test/0-others/show_tag_index.py +++ b/tests/system-test/0-others/show_tag_index.py @@ -121,6 +121,11 @@ class TDTestCase: tdSql.error(f'show tags from tb_undef from db', expectErrInfo='Fail to get table info, error: Table does not exist') tdSql.error(f'show tags from db.tb_undef', expectErrInfo='Fail to get table info, error: Table does not exist') tdSql.error(f'show tags from tb_undef', expectErrInfo='Fail to get table info, error: Table does not exist') + tdSql.error(f'show tags from ntb', expectErrInfo='Tags can only applied to super table and child table') + tdSql.error(f'show tags from vtb', expectErrInfo='Tags can only applied to super table and child table') + tdSql.error(f'show tags from vtb1', expectErrInfo='Tags can only applied to super table and child table') + tdSql.error(f'show tags from vtb2', expectErrInfo='Tags can only applied to super table and child table') + tdSql.error(f'show tags from vtbn', expectErrInfo='Tags can only applied to super table and child table') # show table tags tdSql.query(f'show table tags from stb') From 65d724c17866d84bf8947b7cf3a97a8a135b2b79 Mon Sep 17 00:00:00 2001 From: Alex Duan <417921451@qq.com> Date: Tue, 14 May 2024 13:28:00 +0800 Subject: [PATCH 23/33] fix: the field is not float or double match invalid tsz compress --- tests/army/community/storage/compressBasic.py | 31 +++++++++++++------ 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/tests/army/community/storage/compressBasic.py b/tests/army/community/storage/compressBasic.py index db52c9baf8..48254fe3ac 100644 --- a/tests/army/community/storage/compressBasic.py +++ b/tests/army/community/storage/compressBasic.py @@ -47,14 +47,20 @@ class TDTestCase(TBase): dtypes = [ "tinyint","tinyint unsigned","smallint","smallint unsigned","int","int unsigned", "bigint","bigint unsigned","timestamp","bool","float","double","binary(16)","nchar(16)", "varchar(16)","varbinary(16)"] + + def combineValid(self, datatype, encode, compress): + if datatype != "float" and datatype != "double": + if compress == "tsz": + return False + return True def genAllSqls(self, stbName, max): # encode encodes = [ - [["tinyint","tinyint unsigned","smallint","smallint unsigned","int","int unsigned","bigint","bigint unsigned"], ["simple8b"]], - [["timestamp","bigint","bigint unsigned"], ["delta-i"]], - [["bool"], ["bit-packing"]], - [["float","double"], ["delta-d"]] + [["tinyint","tinyint unsigned","smallint","smallint unsigned","int","int unsigned","bigint","bigint unsigned"], ["simple8B"]], + [["timestamp","bigint","bigint unsigned"], ["Delta-i"]], + [["bool"], ["Bit-packing"]], + [["float","double"], ["Delta-d"]] ] c = 0 # column number @@ -65,7 +71,6 @@ class TDTestCase(TBase): # loop append sqls for lines in encodes: - print(lines) for datatype in lines[0]: for encode in lines[1]: for compress in self.compresses: @@ -74,8 +79,9 @@ class TDTestCase(TBase): # first sql = f"create table {self.db}.st{t} (ts timestamp" else: - sql += f", c{c} {datatype} ENCODE '{encode}' COMPRESS '{compress}' LEVEL '{level}'" - c += 1 + if self.combineValid(datatype, encode, compress): + sql += f", c{c} {datatype} ENCODE '{encode}' COMPRESS '{compress}' LEVEL '{level}'" + c += 1 if c >= max: # append sqls @@ -97,9 +103,11 @@ class TDTestCase(TBase): # check error create def errorCreate(self): sqls = [ - f"create table terr(ts timestamp, c0 int ENCODE 'abc') ", - f"" + f"create table terr(ts timestamp, c0 int ENCODE 'simple8B' COMPRESS 'tsz' LEVEL 'high') ", + f"create table terr(ts timestamp, bi bigint encode 'bit-packing') tags (area int);" + f"create table terr(ts timestamp, ic int encode 'delta-d') tags (area int);" ] + tdSql.errors(sqls) for dtype in self.dtypes: # encode @@ -111,6 +119,11 @@ class TDTestCase(TBase): # level sql = f"create table terr(ts timestamp, c0 {dtype} LEVEL 'hig') " tdSql.error(sql) + + # tsz check + if dtype != "float" and dtype != "double": + sql = f"create table terr(ts timestamp, c0 {dtype} COMPRESS 'tsz') " + tdSql.error(sql) # default value correct def defaultCorrect(self): From 876ea12bfa509997fcfdf07759d4d4f8cd66b7e0 Mon Sep 17 00:00:00 2001 From: wangjiaming0909 <604227650@qq.com> Date: Tue, 14 May 2024 15:20:49 +0800 Subject: [PATCH 24/33] fix get table meta without meta lock --- source/libs/catalog/src/ctgCache.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/source/libs/catalog/src/ctgCache.c b/source/libs/catalog/src/ctgCache.c index 7d392346ad..9f9f783458 100644 --- a/source/libs/catalog/src/ctgCache.c +++ b/source/libs/catalog/src/ctgCache.c @@ -3226,14 +3226,24 @@ int32_t ctgGetTbTSMAFromCache(SCatalog* pCtg, SCtgTbTSMACtx* pCtx, int32_t dbIdx // get tb cache pName = taosArrayGet(pList, i); pTbCache = taosHashAcquire(dbCache->tbCache, pName->tname, strlen(pName->tname)); - if (!pTbCache || !pTbCache->pMeta) { + if (!pTbCache) { ctgDebug("tb: %s.%s not in cache", dbFName, pName->tname); ctgAddTSMAFetch(&pCtx->pFetches, dbIdx, i, fetchIdx, baseResIdx + i, flag, FETCH_TSMA_SOURCE_TB_META, NULL); taosArrayPush(pCtx->pResList, &(SMetaRes){0}); continue; } + CTG_LOCK(CTG_READ, &pTbCache->metaLock); + if (!pTbCache->pMeta) { + CTG_UNLOCK(CTG_READ, &pTbCache->metaLock); + ctgDebug("tb: %s.%s not in cache", dbFName, pName->tname); + ctgAddTSMAFetch(&pCtx->pFetches, dbIdx, i, fetchIdx, baseResIdx + i, flag, FETCH_TSMA_SOURCE_TB_META, NULL); + taosArrayPush(pCtx->pResList, &(SMetaRes){0}); + taosHashRelease(dbCache->tbCache, pTbCache); + continue; + } uint64_t suid = pTbCache->pMeta->suid; int8_t tbType = pTbCache->pMeta->tableType; + CTG_UNLOCK(CTG_READ, &pTbCache->metaLock); taosHashRelease(dbCache->tbCache, pTbCache); SName tsmaSourceTbName = *pName; From 4c6be2464ed6670a9597f9534df16f72560823ae Mon Sep 17 00:00:00 2001 From: Chris Zhai Date: Tue, 14 May 2024 15:25:59 +0800 Subject: [PATCH 25/33] add test cases for TD-29904 --- tests/army/community/query/show.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tests/army/community/query/show.py b/tests/army/community/query/show.py index 9192aee06e..2fbfd6cdfb 100644 --- a/tests/army/community/query/show.py +++ b/tests/army/community/query/show.py @@ -125,10 +125,13 @@ class TDTestCase(TBase): sqls = [ "show scores;", "SHOW CLUSTER VARIABLES", - "SHOW BNODES;", + # "SHOW BNODES;", ] tdSql.executes(sqls) + # verification for TD-29904 + tdSql.error("show tags from t100000", expectErrInfo='Fail to get table info, error: Table does not exist') + # run def run(self): @@ -143,6 +146,9 @@ class TDTestCase(TBase): # do action self.doQuery() + # check show + self.checkShow() + tdLog.success(f"{__file__} successfully executed") From 9300b7a4019bc5b2a800eb55b465bb59ccee1d3a Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Tue, 14 May 2024 16:22:11 +0800 Subject: [PATCH 26/33] fix(tsdb): fix the length of column type overflow. --- source/dnode/vnode/src/tsdb/tsdbReadUtil.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/dnode/vnode/src/tsdb/tsdbReadUtil.c b/source/dnode/vnode/src/tsdb/tsdbReadUtil.c index 1a62c824d7..30186990ca 100644 --- a/source/dnode/vnode/src/tsdb/tsdbReadUtil.c +++ b/source/dnode/vnode/src/tsdb/tsdbReadUtil.c @@ -212,7 +212,7 @@ static void initLastProcKey(STableBlockScanInfo *pScanInfo, STsdbReader* pReader int32_t numOfPks = pReader->suppInfo.numOfPks; bool asc = ASCENDING_TRAVERSE(pReader->info.order); int8_t type = pReader->suppInfo.pk.type; - int8_t bytes = pReader->suppInfo.pk.bytes; + int32_t bytes = pReader->suppInfo.pk.bytes; SRowKey* pRowKey = &pScanInfo->lastProcKey; if (asc) { From 72daedc2fd5b29c051f97a059442243ed8f9dfbe Mon Sep 17 00:00:00 2001 From: Chris Zhai Date: Tue, 14 May 2024 17:20:55 +0800 Subject: [PATCH 27/33] update test cases --- tests/army/community/query/show.py | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/tests/army/community/query/show.py b/tests/army/community/query/show.py index 2fbfd6cdfb..980e60387a 100644 --- a/tests/army/community/query/show.py +++ b/tests/army/community/query/show.py @@ -102,6 +102,22 @@ class TDTestCase(TBase): allRows = self.insert_rows * self.childtable_count tdSql.checkFirstValue(sql, allRows) + def checkShowTags(self): + # verification for TD-29904 + tdSql.error("show tags from t100000", expectErrInfo='Fail to get table info, error: Table does not exist') + + sql = "show tags from child1" + tdSql.query(sql) + tdSql.checkRows(5) + + sql = f"show tags from child1 from {self.db}" + tdSql.query(sql) + tdSql.checkRows(5) + + sql = f"show tags from {self.db}.child1" + tdSql.query(sql) + tdSql.checkRows(5) + def checkShow(self): # not support sql = "show accounts;" @@ -129,8 +145,7 @@ class TDTestCase(TBase): ] tdSql.executes(sqls) - # verification for TD-29904 - tdSql.error("show tags from t100000", expectErrInfo='Fail to get table info, error: Table does not exist') + self.checkShowTags() # run From 241f8b3d2e733c7ba7420edb5923e44c4c1b5e05 Mon Sep 17 00:00:00 2001 From: Haojun Liao Date: Tue, 14 May 2024 18:05:13 +0800 Subject: [PATCH 28/33] fix(tsdb): fix deadlock when stopping reader. --- source/libs/executor/src/executor.c | 17 ++++++++++------- source/libs/stream/src/streamMeta.c | 2 ++ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/source/libs/executor/src/executor.c b/source/libs/executor/src/executor.c index 29f667cb66..2f360044c9 100644 --- a/source/libs/executor/src/executor.c +++ b/source/libs/executor/src/executor.c @@ -824,14 +824,17 @@ int32_t qKillTask(qTaskInfo_t tinfo, int32_t rspCode) { qDebug("%s sync killed execTask", GET_TASKID(pTaskInfo)); setTaskKilled(pTaskInfo, TSDB_CODE_TSC_QUERY_KILLED); - taosWLockLatch(&pTaskInfo->lock); - while (qTaskIsExecuting(pTaskInfo)) { - taosMsleep(10); + while(1) { + taosWLockLatch(&pTaskInfo->lock); + if (qTaskIsExecuting(pTaskInfo)) { // let's wait for 100 ms and try again + taosWUnLockLatch(&pTaskInfo->lock); + taosMsleep(100); + } else { // not running now + pTaskInfo->code = rspCode; + taosWUnLockLatch(&pTaskInfo->lock); + return TSDB_CODE_SUCCESS; + } } - pTaskInfo->code = rspCode; - taosWUnLockLatch(&pTaskInfo->lock); - - return TSDB_CODE_SUCCESS; } bool qTaskIsExecuting(qTaskInfo_t qinfo) { diff --git a/source/libs/stream/src/streamMeta.c b/source/libs/stream/src/streamMeta.c index 4fa9b2c66f..0aace1cb5b 100644 --- a/source/libs/stream/src/streamMeta.c +++ b/source/libs/stream/src/streamMeta.c @@ -1631,6 +1631,8 @@ int32_t streamMetaAddFailedTask(SStreamMeta* pMeta, int64_t streamId, int32_t ta streamMetaAddTaskLaunchResult(pMeta, hId.streamId, hId.taskId, startTs, now, false); } } else { + streamMetaRUnLock(pMeta); + stError("failed to locate the stream task:0x%" PRIx64 "-0x%x (vgId:%d), it may have been destroyed or stopped", streamId, taskId, pMeta->vgId); code = TSDB_CODE_STREAM_TASK_NOT_EXIST; From 0c25b71adde2ab3c0ff792f9be09a40fcb63631d Mon Sep 17 00:00:00 2001 From: Yihao Deng Date: Tue, 14 May 2024 20:11:18 +0800 Subject: [PATCH 29/33] change test case --- tests/script/sh/checkAsan.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tests/script/sh/checkAsan.sh b/tests/script/sh/checkAsan.sh index d2f1e13e8f..b1571aa173 100755 --- a/tests/script/sh/checkAsan.sh +++ b/tests/script/sh/checkAsan.sh @@ -72,7 +72,12 @@ python_error=$(cat ${LOG_DIR}/*.info | grep -w "stack" | wc -l) #0 0x7f2d64f5a808 in __interceptor_malloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cc:144 #1 0x7f2d63fcf459 in strerror /build/glibc-SzIz7B/glibc-2.31/string/strerror.c:38 -runtime_error=$(cat ${LOG_DIR}/*.asan | grep "runtime error" | grep -v "trees.c:873" | grep -v "sclfunc.c.*outside the range of representable values of type" | grep -v "signed integer overflow" | grep -v "strerror.c" | grep -v "asan_malloc_linux.cc" | grep -v "strerror.c" | grep -v "asan_malloc_linux.cpp" | grep -v "sclvector.c" | wc -l) + +# TD-29953 +#/home/TDinternal/community/utils/TSZ/sz/src/sz_double.c:388:59: runtime error: 2.64021e+25 is outside the range of representable values of type 'long unsigned int' +#/home/TDinternal/community/utils/TSZ/sz/src/sz_float.c:407:59: runtime error: 5.76041e+19 is outside the range of representable values of type 'long unsigned int' +#/home/TDinternal/community/source/libs/scalar/src/sclfunc.c:808:11: runtime error: -3.40401e+18 is outside the range of representable values of type 'int' +runtime_error=$(cat ${LOG_DIR}/*.asan | grep "runtime error" | grep -v "trees.c:873" | grep -v "sclfunc.c.*outside the range of representable values of type" | grep -v "signed integer overflow" | grep -v "strerror.c" | grep -v "asan_malloc_linux.cc" | grep -v "strerror.c" | grep -v "asan_malloc_linux.cpp" | grep -v "sclvector.c" | grep -v "sclfunc.c:808"| grep -v "sz_double.c:388" | grep -v "sz_float.c:407:59"| wc -l) echo -e "\033[44;32;1m"asan error_num: $error_num"\033[0m" echo -e "\033[44;32;1m"asan memory_leak: $memory_leak"\033[0m" From ab3ba3f2e437191ba48ebe0ba0ab75350f20a251 Mon Sep 17 00:00:00 2001 From: 54liuyao <54liuyao> Date: Wed, 15 May 2024 09:09:20 +0800 Subject: [PATCH 30/33] optimize scan tsdb --- include/common/tdataformat.h | 13 +- source/common/src/tdataformat.c | 8 +- source/dnode/vnode/src/inc/tsdb.h | 24 +++- source/dnode/vnode/src/tsdb/tsdbCache.c | 1 + source/dnode/vnode/src/tsdb/tsdbIter.h | 23 ++++ source/dnode/vnode/src/tsdb/tsdbMemTable.c | 23 ---- source/dnode/vnode/src/tsdb/tsdbMergeTree.c | 2 +- source/dnode/vnode/src/tsdb/tsdbRead2.c | 127 +++++++++++--------- source/dnode/vnode/src/tsdb/tsdbReadUtil.c | 2 +- source/dnode/vnode/src/tsdb/tsdbReadUtil.h | 22 ++-- source/dnode/vnode/src/tsdb/tsdbUtil.c | 5 +- 11 files changed, 146 insertions(+), 104 deletions(-) diff --git a/include/common/tdataformat.h b/include/common/tdataformat.h index 49ffd8ec35..2bf88fef8a 100644 --- a/include/common/tdataformat.h +++ b/include/common/tdataformat.h @@ -95,6 +95,15 @@ const static uint8_t BIT2_MAP[4] = {0b11111100, 0b11110011, 0b11001111, 0b001111 #define COL_VAL_IS_NULL(CV) ((CV)->flag == CV_FLAG_NULL) #define COL_VAL_IS_VALUE(CV) ((CV)->flag == CV_FLAG_VALUE) +#define tRowGetKey(_pRow, _pKey) \ + do { \ + (_pKey)->ts = (_pRow)->ts; \ + (_pKey)->numOfPKs = 0; \ + if ((_pRow)->numOfPKs > 0) { \ + tRowGetPrimaryKey((_pRow), (_pKey)); \ + } \ + } while (0) + // SValueColumn ================================ typedef struct { int8_t cmprAlg; // filled by caller @@ -125,8 +134,8 @@ void tRowDestroy(SRow *pRow); int32_t tRowSort(SArray *aRowP); int32_t tRowMerge(SArray *aRowP, STSchema *pTSchema, int8_t flag); int32_t tRowUpsertColData(SRow *pRow, STSchema *pTSchema, SColData *aColData, int32_t nColData, int32_t flag); -void tRowGetKey(SRow *pRow, SRowKey *key); -int32_t tRowKeyCompare(const void *p1, const void *p2); +void tRowGetPrimaryKey(SRow *pRow, SRowKey *key); +int32_t tRowKeyCompare(const SRowKey *key1, const SRowKey *key2); int32_t tRowKeyAssign(SRowKey *pDst, SRowKey *pSrc); // SRowIter ================================ diff --git a/source/common/src/tdataformat.c b/source/common/src/tdataformat.c index 04ad00e1dc..ae3fe6a2a0 100644 --- a/source/common/src/tdataformat.c +++ b/source/common/src/tdataformat.c @@ -1183,8 +1183,7 @@ int32_t tRowUpsertColData(SRow *pRow, STSchema *pTSchema, SColData *aColData, in } } -void tRowGetKey(SRow *row, SRowKey *key) { - key->ts = row->ts; +void tRowGetPrimaryKey(SRow *row, SRowKey *key) { key->numOfPKs = row->numOfPKs; if (key->numOfPKs == 0) { @@ -1283,10 +1282,7 @@ int32_t tValueCompare(const SValue *tv1, const SValue *tv2) { // NOTE: // set key->numOfPKs to 0 as the smallest key with ts // set key->numOfPKs to (TD_MAX_PK_COLS + 1) as the largest key with ts -int32_t tRowKeyCompare(const void *p1, const void *p2) { - SRowKey *key1 = (SRowKey *)p1; - SRowKey *key2 = (SRowKey *)p2; - +FORCE_INLINE int32_t tRowKeyCompare(const SRowKey *key1, const SRowKey *key2) { if (key1->ts < key2->ts) { return -1; } else if (key1->ts > key2->ts) { diff --git a/source/dnode/vnode/src/inc/tsdb.h b/source/dnode/vnode/src/inc/tsdb.h index 01db196479..7fe0cc5cbb 100644 --- a/source/dnode/vnode/src/inc/tsdb.h +++ b/source/dnode/vnode/src/inc/tsdb.h @@ -120,12 +120,32 @@ static FORCE_INLINE int64_t tsdbLogicToFileSize(int64_t lSize, int32_t szPage) { #define tsdbRowFromBlockData(BLOCKDATA, IROW) \ ((TSDBROW){.type = TSDBROW_COL_FMT, .pBlockData = (BLOCKDATA), .iRow = (IROW)}) +#define TSDBROW_INIT_KEY(_ROW, _KEY) \ + { \ + if ((_ROW)->type == TSDBROW_ROW_FMT) { \ + _KEY.version = (_ROW)->version; \ + _KEY.ts = (_ROW)->pTSRow->ts; \ + } else { \ + _KEY.version = (_ROW)->pBlockData->aVersion[(_ROW)->iRow]; \ + _KEY.ts = (_ROW)->pBlockData->aTSKEY[(_ROW)->iRow]; \ + } \ + } + +#define tColRowGetKey(_pBlock, _irow, _key) \ + { \ + (_key)->ts = (_pBlock)->aTSKEY[(_irow)]; \ + (_key)->numOfPKs = 0; \ + if ((_pBlock)->nColData > 0) { \ + tColRowGetPrimaryKey((_pBlock), (_irow), (_key)); \ + } \ + } + void tsdbRowGetColVal(TSDBROW *pRow, STSchema *pTSchema, int32_t iCol, SColVal *pColVal); int32_t tsdbRowCompare(const void *p1, const void *p2); int32_t tsdbRowCompareWithoutVersion(const void *p1, const void *p2); int32_t tsdbRowKeyCmpr(const STsdbRowKey *key1, const STsdbRowKey *key2); void tsdbRowGetKey(TSDBROW *row, STsdbRowKey *key); -void tColRowGetKey(SBlockData *pBlock, int32_t irow, SRowKey *key); +void tColRowGetPrimaryKey(SBlockData *pBlock, int32_t irow, SRowKey *key); // STSDBRowIter @@ -946,8 +966,6 @@ static FORCE_INLINE int32_t tsdbKeyCmprFn(const void *p1, const void *p2) { // #define SL_NODE_FORWARD(n, l) ((n)->forwards[l]) // #define SL_NODE_BACKWARD(n, l) ((n)->forwards[(n)->level + (l)]) -TSDBROW *tsdbTbDataIterGet(STbDataIter *pIter); - typedef struct { int64_t suid; int64_t uid; diff --git a/source/dnode/vnode/src/tsdb/tsdbCache.c b/source/dnode/vnode/src/tsdb/tsdbCache.c index 6f26e3a63f..3f0670714c 100644 --- a/source/dnode/vnode/src/tsdb/tsdbCache.c +++ b/source/dnode/vnode/src/tsdb/tsdbCache.c @@ -16,6 +16,7 @@ #include "functionMgt.h" #include "tsdb.h" #include "tsdbDataFileRW.h" +#include "tsdbIter.h" #include "tsdbReadUtil.h" #include "vnd.h" diff --git a/source/dnode/vnode/src/tsdb/tsdbIter.h b/source/dnode/vnode/src/tsdb/tsdbIter.h index 05449d2042..d0b5a0249b 100644 --- a/source/dnode/vnode/src/tsdb/tsdbIter.h +++ b/source/dnode/vnode/src/tsdb/tsdbIter.h @@ -66,6 +66,29 @@ int32_t tsdbIterMergerSkipTableData(SIterMerger *merger, const TABLEID *tbid); SRowInfo *tsdbIterMergerGetData(SIterMerger *merger); STombRecord *tsdbIterMergerGetTombRecord(SIterMerger *merger); +FORCE_INLINE TSDBROW *tsdbTbDataIterGet(STbDataIter *pIter) { + if (pIter == NULL) return NULL; + + if (pIter->pRow) { + return pIter->pRow; + } + + if (pIter->backward) { + if (pIter->pNode == pIter->pTbData->sl.pHead) { + return NULL; + } + } else { + if (pIter->pNode == pIter->pTbData->sl.pTail) { + return NULL; + } + } + + pIter->pRow = &pIter->row; + pIter->row = pIter->pNode->row; + + return pIter->pRow; +} + #ifdef __cplusplus } #endif diff --git a/source/dnode/vnode/src/tsdb/tsdbMemTable.c b/source/dnode/vnode/src/tsdb/tsdbMemTable.c index be15a4fecf..40cf9adde1 100644 --- a/source/dnode/vnode/src/tsdb/tsdbMemTable.c +++ b/source/dnode/vnode/src/tsdb/tsdbMemTable.c @@ -806,26 +806,3 @@ SArray *tsdbMemTableGetTbDataArray(SMemTable *pMemTable) { _exit: return aTbDataP; } - -TSDBROW *tsdbTbDataIterGet(STbDataIter *pIter) { - if (pIter == NULL) return NULL; - - if (pIter->pRow) { - return pIter->pRow; - } - - if (pIter->backward) { - if (pIter->pNode == pIter->pTbData->sl.pHead) { - return NULL; - } - } else { - if (pIter->pNode == pIter->pTbData->sl.pTail) { - return NULL; - } - } - - pIter->pRow = &pIter->row; - pIter->row = pIter->pNode->row; - - return pIter->pRow; -} diff --git a/source/dnode/vnode/src/tsdb/tsdbMergeTree.c b/source/dnode/vnode/src/tsdb/tsdbMergeTree.c index 6b459f90f3..2a49c1ba0a 100644 --- a/source/dnode/vnode/src/tsdb/tsdbMergeTree.c +++ b/source/dnode/vnode/src/tsdb/tsdbMergeTree.c @@ -828,7 +828,7 @@ static FORCE_INLINE int32_t tLDataIterCmprFn(const SRBTreeNode *p1, const SRBTre SLDataIter *pIter1 = (SLDataIter *)(((uint8_t *)p1) - offsetof(SLDataIter, node)); SLDataIter *pIter2 = (SLDataIter *)(((uint8_t *)p2) - offsetof(SLDataIter, node)); - SRowKey rkey1, rkey2; + SRowKey rkey1 = {0}, rkey2 = {0}; tRowGetKeyEx(&pIter1->rInfo.row, &rkey1); tRowGetKeyEx(&pIter2->rInfo.row, &rkey2); diff --git a/source/dnode/vnode/src/tsdb/tsdbRead2.c b/source/dnode/vnode/src/tsdb/tsdbRead2.c index c25deb0d66..9ba45a9850 100644 --- a/source/dnode/vnode/src/tsdb/tsdbRead2.c +++ b/source/dnode/vnode/src/tsdb/tsdbRead2.c @@ -24,6 +24,16 @@ #define ASCENDING_TRAVERSE(o) (o == TSDB_ORDER_ASC) #define getCurrentKeyInSttBlock(_r) (&((_r)->currentKey)) +#define tColRowGetKeyDeepCopy(_pBlock, _irow, _slotId, _pKey) \ + do { \ + (_pKey)->ts = (_pBlock)->aTSKEY[(_irow)]; \ + (_pKey)->numOfPKs = 0; \ + if ((_slotId) != -1) { \ + tColRowGetPriamyKeyDeepCopy(_pBlock, _irow, _slotId, _pKey); \ + } \ + } while(0) + +#define outOfTimeWindow(_ts, _window) (((_ts) > (_window)->ekey) || ((_ts) < (_window)->skey)) typedef struct { bool overlapWithNeighborBlock; @@ -75,11 +85,9 @@ static void getMemTableTimeRange(STsdbReader* pReader, int64_t* pMaxKey static void updateComposedBlockInfo(STsdbReader* pReader, double el, STableBlockScanInfo* pBlockScanInfo); static int32_t buildFromPreFilesetBuffer(STsdbReader* pReader); -static bool outOfTimeWindow(int64_t ts, STimeWindow* pWindow) { return (ts > pWindow->ekey) || (ts < pWindow->skey); } - static void resetPreFilesetMemTableListIndex(SReaderStatus* pStatus); -int32_t pkCompEx(SRowKey* p1, SRowKey* p2) { +FORCE_INLINE int32_t pkCompEx(SRowKey* p1, SRowKey* p2) { if (p2 == NULL) { return 1; } @@ -101,13 +109,7 @@ int32_t pkCompEx(SRowKey* p1, SRowKey* p2) { } } -static void tColRowGetKeyDeepCopy(SBlockData* pBlock, int32_t irow, int32_t slotId, SRowKey* pKey) { - pKey->ts = pBlock->aTSKEY[irow]; - if (slotId == -1) { - pKey->numOfPKs = 0; - return; - } - +static void tColRowGetPriamyKeyDeepCopy(SBlockData* pBlock, int32_t irow, int32_t slotId, SRowKey* pKey) { SColData* pColData = &pBlock->aColData[slotId]; SColVal cv; tColDataGetValue(pColData, irow, &cv); @@ -131,13 +133,7 @@ static int32_t tGetPrimaryKeyIndex(uint8_t *p, SPrimaryKeyIndex *index) { return n; } -static void tRowGetKeyDeepCopy(SRow* pRow, SRowKey* pKey) { - pKey->ts = pRow->ts; - pKey->numOfPKs = pRow->numOfPKs; - if (pKey->numOfPKs == 0) { - return; - } - +static void tRowGetPrimaryKeyDeepCopy(SRow* pRow, SRowKey* pKey) { SPrimaryKeyIndex indices[TD_MAX_PK_COLS]; ASSERT(pKey->numOfPKs <= TD_MAX_PK_COLS); @@ -1735,7 +1731,7 @@ static int32_t doMergeBufAndFileRows(STsdbReader* pReader, STableBlockScanInfo* pSttKey = getCurrentKeyInSttBlock(pSttBlockReader); } - SRowKey k; + SRowKey k = {0}; tRowGetKeyEx(pRow, &k); STSchema* pSchema = NULL; @@ -1939,7 +1935,7 @@ static int32_t doMergeMultiLevelRows(STsdbReader* pReader, STableBlockScanInfo* pfKey = NULL; } - SRowKey k, ik; + SRowKey k = {0}, ik = {0}; tRowGetKeyEx(pRow, &k); tRowGetKeyEx(piRow, &ik); @@ -2086,7 +2082,7 @@ int32_t doInitMemDataIter(STsdbReader* pReader, STbData** pData, STableBlockScan } static void doForwardDataIter(SRowKey* pKey, SIterInfo* pIter, STableBlockScanInfo* pBlockScanInfo, STsdbReader* pReader) { - SRowKey rowKey; + SRowKey rowKey = {0}; while (1) { TSDBROW* pRow = getValidMemRow(pIter, pBlockScanInfo->delSkyline, pReader); @@ -3559,7 +3555,7 @@ bool hasBeenDropped(const SArray* pDelList, int32_t* index, int64_t key, int64_t return false; } -TSDBROW* getValidMemRow(SIterInfo* pIter, const SArray* pDelList, STsdbReader* pReader) { +FORCE_INLINE TSDBROW* getValidMemRow(SIterInfo* pIter, const SArray* pDelList, STsdbReader* pReader) { if (!pIter->hasVal) { return NULL; } @@ -3567,7 +3563,8 @@ TSDBROW* getValidMemRow(SIterInfo* pIter, const SArray* pDelList, STsdbReader* p int32_t order = pReader->info.order; TSDBROW* pRow = tsdbTbDataIterGet(pIter->iter); - TSDBKEY key = TSDBROW_KEY(pRow); + TSDBKEY key; + TSDBROW_INIT_KEY(pRow, key); if (outOfTimeWindow(key.ts, &pReader->info.window)) { pIter->hasVal = false; return NULL; @@ -3593,7 +3590,7 @@ TSDBROW* getValidMemRow(SIterInfo* pIter, const SArray* pDelList, STsdbReader* p pRow = tsdbTbDataIterGet(pIter->iter); - key = TSDBROW_KEY(pRow); + TSDBROW_INIT_KEY(pRow, key); if (outOfTimeWindow(key.ts, &pReader->info.window)) { pIter->hasVal = false; return NULL; @@ -3632,10 +3629,12 @@ int32_t doMergeRowsInBuf(SIterInfo* pIter, uint64_t uid, SRowKey *pCurKey, SArra break; } - SRowKey nextKey = {0}; - tRowGetKeyEx(pRow, &nextKey); - if (pkCompEx(pCurKey, &nextKey) != 0) { - break; + if (pCurKey->numOfPKs > 0) { + SRowKey nextKey = {0}; + tRowGetKeyEx(pRow, &nextKey); + if (pkCompEx(pCurKey, &nextKey) != 0) { + break; + } } STSchema* pTSchema = NULL; @@ -3785,12 +3784,14 @@ int32_t doMergeMemTableMultiRows(TSDBROW* pRow, SRowKey* pKey, uint64_t uid, SIt return TSDB_CODE_SUCCESS; } - SRowKey nextRowKey = {0}; - tRowGetKeyEx(pNextRow, &nextRowKey); - if (pKey->numOfPKs > 0 && pkCompEx(pKey, &nextRowKey) != 0) { - *pResRow = current; - *freeTSRow = false; - return TSDB_CODE_SUCCESS; + if (pKey->numOfPKs > 0) { + SRowKey nextRowKey = {0}; + tRowGetKeyEx(pNextRow, &nextRowKey); + if (pkCompEx(pKey, &nextRowKey) != 0) { + *pResRow = current; + *freeTSRow = false; + return TSDB_CODE_SUCCESS; + } } } } @@ -3801,7 +3802,7 @@ int32_t doMergeMemTableMultiRows(TSDBROW* pRow, SRowKey* pKey, uint64_t uid, SIt // start to merge duplicated rows STSchema* pTSchema = NULL; if (current.type == TSDBROW_ROW_FMT) { // get the correct schema for row-wise data in memory - pTSchema = doGetSchemaForTSRow(TSDBROW_SVERSION(¤t), pReader, uid); + pTSchema = doGetSchemaForTSRow(current.pTSRow->sver, pReader, uid); if (pTSchema == NULL) { return terrno; } @@ -3814,7 +3815,7 @@ int32_t doMergeMemTableMultiRows(TSDBROW* pRow, SRowKey* pKey, uint64_t uid, SIt STSchema* pTSchema1 = NULL; if (pNextRow->type == TSDBROW_ROW_FMT) { // get the correct schema for row-wise data in memory - pTSchema1 = doGetSchemaForTSRow(TSDBROW_SVERSION(pNextRow), pReader, uid); + pTSchema1 = doGetSchemaForTSRow(pNextRow->pTSRow->sver, pReader, uid); if (pTSchema1 == NULL) { return terrno; } @@ -3926,37 +3927,49 @@ static int32_t tsdbGetNextRowInMem(STableBlockScanInfo* pBlockScanInfo, STsdbRea // todo refactor bool asc = ASCENDING_TRAVERSE(pReader->info.order); if (piter->hasVal) { - TSDBKEY k = TSDBROW_KEY(pRow); - if ((k.ts >= endKey && asc) || (k.ts <= endKey && !asc)) { + tRowGetKeyEx(pRow, &rowKey); + if ((rowKey.ts >= endKey && asc) || (rowKey.ts <= endKey && !asc)) { pRow = NULL; } } if (piiter->hasVal) { - TSDBKEY k = TSDBROW_KEY(piRow); - if ((k.ts >= endKey && asc) || (k.ts <= endKey && !asc)) { + tRowGetKeyEx(piRow, &irowKey); + if ((irowKey.ts >= endKey && asc) || (irowKey.ts <= endKey && !asc)) { piRow = NULL; } } - if (piter->hasVal && piiter->hasVal && pRow != NULL && piRow != NULL) { - tRowGetKeyEx(pRow, &rowKey); - tRowGetKeyEx(piRow, &irowKey); - + if (pRow != NULL && piRow != NULL) { int32_t code = TSDB_CODE_SUCCESS; - int32_t ret = pkCompEx(&rowKey, &irowKey); - if (ret != 0) { - if ((ret > 0 && asc) || (ret < 0 && (!asc))) { // ik.ts < k.ts + if (rowKey.numOfPKs == 0) { + if ((rowKey.ts > irowKey.ts && asc) || (rowKey.ts < irowKey.ts && (!asc))) { // ik.ts < k.ts code = doMergeMemTableMultiRows(piRow, &irowKey, uid, piiter, pDelList, pResRow, pReader, freeTSRow); - } else if ((ret < 0 && asc) || (ret > 0 && (!asc))) { + } else if ((rowKey.ts < irowKey.ts && asc) || (rowKey.ts > irowKey.ts && (!asc))) { code = doMergeMemTableMultiRows(pRow, &rowKey, uid, piter, pDelList, pResRow, pReader, freeTSRow); + } else { // ik.ts == k.ts + *freeTSRow = true; + pResRow->type = TSDBROW_ROW_FMT; + code = doMergeMemIMemRows(pRow, &rowKey, piRow, &irowKey, pBlockScanInfo, pReader, &pResRow->pTSRow); + if (code != TSDB_CODE_SUCCESS) { + return code; + } } - } else { // ik.ts == k.ts - *freeTSRow = true; - pResRow->type = TSDBROW_ROW_FMT; - code = doMergeMemIMemRows(pRow, &rowKey, piRow, &irowKey, pBlockScanInfo, pReader, &pResRow->pTSRow); - if (code != TSDB_CODE_SUCCESS) { - return code; + } else { + int32_t ret = pkCompEx(&rowKey, &irowKey); + if (ret != 0) { + if ((ret > 0 && asc) || (ret < 0 && (!asc))) { // ik.ts < k.ts + code = doMergeMemTableMultiRows(piRow, &irowKey, uid, piiter, pDelList, pResRow, pReader, freeTSRow); + } else if ((ret < 0 && asc) || (ret > 0 && (!asc))) { + code = doMergeMemTableMultiRows(pRow, &rowKey, uid, piter, pDelList, pResRow, pReader, freeTSRow); + } + } else { // ik.ts == k.ts + *freeTSRow = true; + pResRow->type = TSDBROW_ROW_FMT; + code = doMergeMemIMemRows(pRow, &rowKey, piRow, &irowKey, pBlockScanInfo, pReader, &pResRow->pTSRow); + if (code != TSDB_CODE_SUCCESS) { + return code; + } } } @@ -3964,12 +3977,10 @@ static int32_t tsdbGetNextRowInMem(STableBlockScanInfo* pBlockScanInfo, STsdbRea } if (piter->hasVal && pRow != NULL) { - tRowGetKeyEx(pRow, &rowKey); return doMergeMemTableMultiRows(pRow, &rowKey, uid, piter, pDelList, pResRow, pReader, freeTSRow); } if (piiter->hasVal && piRow != NULL) { - tRowGetKeyEx(piRow, &irowKey); return doMergeMemTableMultiRows(piRow, &irowKey, uid, piiter, pDelList, pResRow, pReader, freeTSRow); } @@ -4095,7 +4106,11 @@ int32_t buildDataBlockFromBufImpl(STableBlockScanInfo* pBlockScanInfo, int64_t e if (row.type == TSDBROW_ROW_FMT) { code = doAppendRowFromTSRow(pBlock, pReader, row.pTSRow, pBlockScanInfo); if (code == TSDB_CODE_SUCCESS) { - tRowGetKeyDeepCopy(row.pTSRow, &pBlockScanInfo->lastProcKey); + pBlockScanInfo->lastProcKey.ts = row.pTSRow->ts; + pBlockScanInfo->lastProcKey.numOfPKs = row.pTSRow->numOfPKs; + if (row.pTSRow->numOfPKs > 0) { + tRowGetPrimaryKeyDeepCopy(row.pTSRow, &pBlockScanInfo->lastProcKey); + } } if (freeTSRow) { diff --git a/source/dnode/vnode/src/tsdb/tsdbReadUtil.c b/source/dnode/vnode/src/tsdb/tsdbReadUtil.c index 1a62c824d7..90b2d8c6b0 100644 --- a/source/dnode/vnode/src/tsdb/tsdbReadUtil.c +++ b/source/dnode/vnode/src/tsdb/tsdbReadUtil.c @@ -1056,7 +1056,7 @@ static int32_t sortUidComparFn(const void* p1, const void* p2) { const SSttKeyRange* px1 = p1; const SSttKeyRange* px2 = p2; - int32_t ret = tRowKeyCompare(&px1, px2); + int32_t ret = tRowKeyCompare(&px1->skey, &px2->skey); return ret; } diff --git a/source/dnode/vnode/src/tsdb/tsdbReadUtil.h b/source/dnode/vnode/src/tsdb/tsdbReadUtil.h index 5f0a58c378..fd3ab22d76 100644 --- a/source/dnode/vnode/src/tsdb/tsdbReadUtil.h +++ b/source/dnode/vnode/src/tsdb/tsdbReadUtil.h @@ -38,14 +38,20 @@ extern "C" { (_k)->ekey.ts = INT64_MIN; \ } while (0); -#define tRowGetKeyEx(_pRow, _pKey) \ - do { \ - if ((_pRow)->type == TSDBROW_ROW_FMT) { \ - tRowGetKey((_pRow)->pTSRow, (_pKey)); \ - } else { \ - tColRowGetKey((_pRow)->pBlockData, (_pRow)->iRow, (_pKey)); \ - } \ - } while (0) +#define tRowGetKeyEx(_pRow, _pKey) \ + { \ + if ((_pRow)->type == TSDBROW_ROW_FMT) { \ + (_pKey)->ts = (_pRow)->pTSRow->ts; \ + if ((_pRow)->pTSRow->numOfPKs > 0) { \ + tRowGetPrimaryKey((_pRow)->pTSRow, (_pKey)); \ + } \ + } else { \ + (_pKey)->ts = (_pRow)->pBlockData->aTSKEY[(_pRow)->iRow]; \ + if ((_pRow)->pBlockData->nColData > 0) { \ + tColRowGetPrimaryKey((_pRow)->pBlockData, (_pRow)->iRow, (_pKey)); \ + } \ + } \ + } typedef enum { READER_STATUS_SUSPEND = 0x1, diff --git a/source/dnode/vnode/src/tsdb/tsdbUtil.c b/source/dnode/vnode/src/tsdb/tsdbUtil.c index 60459b0d21..fcd9669f9a 100644 --- a/source/dnode/vnode/src/tsdb/tsdbUtil.c +++ b/source/dnode/vnode/src/tsdb/tsdbUtil.c @@ -628,10 +628,7 @@ void tsdbRowGetKey(TSDBROW *row, STsdbRowKey *key) { } } -void tColRowGetKey(SBlockData *pBlock, int32_t irow, SRowKey *key) { - key->ts = pBlock->aTSKEY[irow]; - key->numOfPKs = 0; - +void tColRowGetPrimaryKey(SBlockData *pBlock, int32_t irow, SRowKey *key) { for (int32_t i = 0; i < pBlock->nColData; i++) { SColData *pColData = &pBlock->aColData[i]; if (pColData->cflag & COL_IS_KEY) { From 3c56f623ede5baea16068e499933ad7c262046cb Mon Sep 17 00:00:00 2001 From: 54liuyao <54liuyao> Date: Wed, 15 May 2024 10:46:19 +0800 Subject: [PATCH 31/33] adj inline func --- source/dnode/vnode/src/inc/tsdb.h | 23 +++++++++++++++++++++++ source/dnode/vnode/src/tsdb/tsdbIter.h | 23 ----------------------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/source/dnode/vnode/src/inc/tsdb.h b/source/dnode/vnode/src/inc/tsdb.h index 7fe0cc5cbb..e1293c7f11 100644 --- a/source/dnode/vnode/src/inc/tsdb.h +++ b/source/dnode/vnode/src/inc/tsdb.h @@ -966,6 +966,29 @@ static FORCE_INLINE int32_t tsdbKeyCmprFn(const void *p1, const void *p2) { // #define SL_NODE_FORWARD(n, l) ((n)->forwards[l]) // #define SL_NODE_BACKWARD(n, l) ((n)->forwards[(n)->level + (l)]) +static FORCE_INLINE TSDBROW *tsdbTbDataIterGet(STbDataIter *pIter) { + if (pIter == NULL) return NULL; + + if (pIter->pRow) { + return pIter->pRow; + } + + if (pIter->backward) { + if (pIter->pNode == pIter->pTbData->sl.pHead) { + return NULL; + } + } else { + if (pIter->pNode == pIter->pTbData->sl.pTail) { + return NULL; + } + } + + pIter->pRow = &pIter->row; + pIter->row = pIter->pNode->row; + + return pIter->pRow; +} + typedef struct { int64_t suid; int64_t uid; diff --git a/source/dnode/vnode/src/tsdb/tsdbIter.h b/source/dnode/vnode/src/tsdb/tsdbIter.h index d0b5a0249b..05449d2042 100644 --- a/source/dnode/vnode/src/tsdb/tsdbIter.h +++ b/source/dnode/vnode/src/tsdb/tsdbIter.h @@ -66,29 +66,6 @@ int32_t tsdbIterMergerSkipTableData(SIterMerger *merger, const TABLEID *tbid); SRowInfo *tsdbIterMergerGetData(SIterMerger *merger); STombRecord *tsdbIterMergerGetTombRecord(SIterMerger *merger); -FORCE_INLINE TSDBROW *tsdbTbDataIterGet(STbDataIter *pIter) { - if (pIter == NULL) return NULL; - - if (pIter->pRow) { - return pIter->pRow; - } - - if (pIter->backward) { - if (pIter->pNode == pIter->pTbData->sl.pHead) { - return NULL; - } - } else { - if (pIter->pNode == pIter->pTbData->sl.pTail) { - return NULL; - } - } - - pIter->pRow = &pIter->row; - pIter->row = pIter->pNode->row; - - return pIter->pRow; -} - #ifdef __cplusplus } #endif From 4c603fee55cc4d44febbd5e16105aa702f5aa86e Mon Sep 17 00:00:00 2001 From: 54liuyao <54liuyao> Date: Wed, 15 May 2024 10:54:24 +0800 Subject: [PATCH 32/33] format code --- include/common/tdataformat.h | 14 +++++++------- source/dnode/vnode/src/inc/tsdb.h | 20 ++++++++++---------- source/dnode/vnode/src/tsdb/tsdbRead2.c | 4 ++-- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/include/common/tdataformat.h b/include/common/tdataformat.h index 2bf88fef8a..ce9b95522a 100644 --- a/include/common/tdataformat.h +++ b/include/common/tdataformat.h @@ -95,13 +95,13 @@ const static uint8_t BIT2_MAP[4] = {0b11111100, 0b11110011, 0b11001111, 0b001111 #define COL_VAL_IS_NULL(CV) ((CV)->flag == CV_FLAG_NULL) #define COL_VAL_IS_VALUE(CV) ((CV)->flag == CV_FLAG_VALUE) -#define tRowGetKey(_pRow, _pKey) \ - do { \ - (_pKey)->ts = (_pRow)->ts; \ - (_pKey)->numOfPKs = 0; \ - if ((_pRow)->numOfPKs > 0) { \ - tRowGetPrimaryKey((_pRow), (_pKey)); \ - } \ +#define tRowGetKey(_pRow, _pKey) \ + do { \ + (_pKey)->ts = (_pRow)->ts; \ + (_pKey)->numOfPKs = 0; \ + if ((_pRow)->numOfPKs > 0) { \ + tRowGetPrimaryKey((_pRow), (_pKey)); \ + } \ } while (0) // SValueColumn ================================ diff --git a/source/dnode/vnode/src/inc/tsdb.h b/source/dnode/vnode/src/inc/tsdb.h index e1293c7f11..04a621d4f5 100644 --- a/source/dnode/vnode/src/inc/tsdb.h +++ b/source/dnode/vnode/src/inc/tsdb.h @@ -120,19 +120,19 @@ static FORCE_INLINE int64_t tsdbLogicToFileSize(int64_t lSize, int32_t szPage) { #define tsdbRowFromBlockData(BLOCKDATA, IROW) \ ((TSDBROW){.type = TSDBROW_COL_FMT, .pBlockData = (BLOCKDATA), .iRow = (IROW)}) -#define TSDBROW_INIT_KEY(_ROW, _KEY) \ - { \ - if ((_ROW)->type == TSDBROW_ROW_FMT) { \ - _KEY.version = (_ROW)->version; \ - _KEY.ts = (_ROW)->pTSRow->ts; \ - } else { \ - _KEY.version = (_ROW)->pBlockData->aVersion[(_ROW)->iRow]; \ - _KEY.ts = (_ROW)->pBlockData->aTSKEY[(_ROW)->iRow]; \ - } \ +#define TSDBROW_INIT_KEY(_ROW, _KEY) \ + { \ + if ((_ROW)->type == TSDBROW_ROW_FMT) { \ + _KEY.version = (_ROW)->version; \ + _KEY.ts = (_ROW)->pTSRow->ts; \ + } else { \ + _KEY.version = (_ROW)->pBlockData->aVersion[(_ROW)->iRow]; \ + _KEY.ts = (_ROW)->pBlockData->aTSKEY[(_ROW)->iRow]; \ + } \ } #define tColRowGetKey(_pBlock, _irow, _key) \ - { \ + { \ (_key)->ts = (_pBlock)->aTSKEY[(_irow)]; \ (_key)->numOfPKs = 0; \ if ((_pBlock)->nColData > 0) { \ diff --git a/source/dnode/vnode/src/tsdb/tsdbRead2.c b/source/dnode/vnode/src/tsdb/tsdbRead2.c index 9ba45a9850..99520f7c92 100644 --- a/source/dnode/vnode/src/tsdb/tsdbRead2.c +++ b/source/dnode/vnode/src/tsdb/tsdbRead2.c @@ -24,14 +24,14 @@ #define ASCENDING_TRAVERSE(o) (o == TSDB_ORDER_ASC) #define getCurrentKeyInSttBlock(_r) (&((_r)->currentKey)) -#define tColRowGetKeyDeepCopy(_pBlock, _irow, _slotId, _pKey) \ +#define tColRowGetKeyDeepCopy(_pBlock, _irow, _slotId, _pKey) \ do { \ (_pKey)->ts = (_pBlock)->aTSKEY[(_irow)]; \ (_pKey)->numOfPKs = 0; \ if ((_slotId) != -1) { \ tColRowGetPriamyKeyDeepCopy(_pBlock, _irow, _slotId, _pKey); \ } \ - } while(0) + } while (0) #define outOfTimeWindow(_ts, _window) (((_ts) > (_window)->ekey) || ((_ts) < (_window)->skey)) From 167cdc79c5659d2555913ba7a3f99ca651a78c88 Mon Sep 17 00:00:00 2001 From: 54liuyao <54liuyao> Date: Wed, 15 May 2024 10:54:53 +0800 Subject: [PATCH 33/33] format code --- source/dnode/vnode/src/tsdb/tsdbReadUtil.h | 26 +++++++++++----------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/source/dnode/vnode/src/tsdb/tsdbReadUtil.h b/source/dnode/vnode/src/tsdb/tsdbReadUtil.h index fd3ab22d76..c13d9ff563 100644 --- a/source/dnode/vnode/src/tsdb/tsdbReadUtil.h +++ b/source/dnode/vnode/src/tsdb/tsdbReadUtil.h @@ -38,19 +38,19 @@ extern "C" { (_k)->ekey.ts = INT64_MIN; \ } while (0); -#define tRowGetKeyEx(_pRow, _pKey) \ - { \ - if ((_pRow)->type == TSDBROW_ROW_FMT) { \ - (_pKey)->ts = (_pRow)->pTSRow->ts; \ - if ((_pRow)->pTSRow->numOfPKs > 0) { \ - tRowGetPrimaryKey((_pRow)->pTSRow, (_pKey)); \ - } \ - } else { \ - (_pKey)->ts = (_pRow)->pBlockData->aTSKEY[(_pRow)->iRow]; \ - if ((_pRow)->pBlockData->nColData > 0) { \ - tColRowGetPrimaryKey((_pRow)->pBlockData, (_pRow)->iRow, (_pKey)); \ - } \ - } \ +#define tRowGetKeyEx(_pRow, _pKey) \ + { \ + if ((_pRow)->type == TSDBROW_ROW_FMT) { \ + (_pKey)->ts = (_pRow)->pTSRow->ts; \ + if ((_pRow)->pTSRow->numOfPKs > 0) { \ + tRowGetPrimaryKey((_pRow)->pTSRow, (_pKey)); \ + } \ + } else { \ + (_pKey)->ts = (_pRow)->pBlockData->aTSKEY[(_pRow)->iRow]; \ + if ((_pRow)->pBlockData->nColData > 0) { \ + tColRowGetPrimaryKey((_pRow)->pBlockData, (_pRow)->iRow, (_pKey)); \ + } \ + } \ } typedef enum {